Dropboxにファイルをアップロードするアプリケーションを開発しました。Libcurl(libcurl-7.21.7)とOpenssl(0.9.8e)apiを使用して、ファイルをDropboxにアップロードしています。サーバーが応答しないためにアプリケーションがクラッシュすることがあることに気づきました。コンソールで発生するエラーは
SSL読み取り:エラー:00000000:lib(0):func(0):reason(0)、errno 131接続#0を閉じる
POSTリクエストにCURL_TIMEOUTを実装しましたが、それでもこのクラッシュに直面しています。タイムアウトが小さい場合はアップロードエラーが継続的に発生し、長すぎる場合はアプリケーションがクラッシュして上記のエラーが発生します。クラッシュを回避するためにリクエストに見られる問題に対処する方法はありますか?
デバッグ時にさらに、アプリケーションがクラッシュするためにクラッシュが実際にsslライブラリで発生していることがわかりました。
これに光を当ててもらえますか?
私が使用しているコードは:
CURL *curl;
curl = curl_easy_init();
curl_global_init(CURL_GLOBAL_ALL);
curl_easy_setopt(curl, CURLOPT_CAINFO, NULL);
curl_easy_setopt(curl, CURLOPT_CAPATH, NULL);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_URL,NOTIFICATIONURL);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_FORBID_REUSE,1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,data());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, datalength);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
long int maxconnectiontime = 600;
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT,maxconnectiontime);
long int maxtime = 1200;
curl_easy_setopt(curl, CURLOPT_TIMEOUT,maxtime);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
if(res)
{
log("\n nCURL ERROR curl_easy_perform return %s [%d]",curl_easy_strerror(res),res);
}
curl_slist_free_all(headers);
curl_global_cleanup();
curl_easy_cleanup(curl);