117981 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

びっくりポン

びっくりポン

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

2010/04/27
XML
カテゴリ:OCaml

先日のlibcurlのOCamlバインディング(ocurl)を使ったftpクライアントの続き。ocurlの古いバージョンをマルチスレッドで使うとsegmentation faultになってしまうようなので、新しいバージョンのもの(0.5.3)へ入れ替えた。

そうしたら、CURLOPT_WRITEFUNCTIONでセットする関数のインターフェイスが変わっていた。処理したバイト数を返せばよいらしいのでそのように書き換える。

それとは別にCurl.cleanupをしたほうが良いかもしれないので追加。

let download src dst =
let oc = open_out dst in
let write s = output_string oc s; String.length s in
let conn = Curl.init () in
Curl.setopt conn (Curl.CURLOPT_URL src);
Curl.setopt conn (Curl.CURLOPT_USERPWD "anonymous:ocaml_user@");
Curl.setopt conn (Curl.CURLOPT_WRITEFUNCTION write);
Curl.perform conn;
Curl.cleanup conn;
close_out oc

マルチスレッドでlibcurlを使う場合は、安全な場所でCurl.global_initとCurl.global_cleanupを明示的に使う必要がある。どちらもスレッドセーフではないということらしい。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2010/04/28 09:24:43 PM
[OCaml] カテゴリの最新記事



© Rakuten Group, Inc.
X