我开发了一个将文件上传到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);
答案 0 :(得分:0)
问题可以通过在客户端代码中添加“SIGPIPE”和SIGALRM“信号来解决。