我开发了一个将文件上传到 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);