libssl读取错误131导致应用程序崩溃

时间:2013-02-08 10:06:56

标签: libcurl libssl

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

1 个答案:

答案 0 :(得分:0)

问题可以通过在客户端代码中添加“SIGPIPE”和SIGALRM“信号来解决。