我以多线程方式使用libCurl(curl_multi_perform),但不知道如何实现,以便我可以处理丢失网络连接(或任何HTTP错误)的情况。 当有任何网络问题时,它看起来永远不会调用我的回调。虽然在详细模式下我看到了以下日志:
…. * getaddressinfo (3) failed.
* Couldn't resolve host xxxx
我将事情设置为:
…...
curl_easy_setopt(curl, CURLOPT_URL, actual_url);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
……
CURLMcode cm = curl_multi_add_handle(multi_handle, curl);
cm = curl_multi_perform(multi_handle, &request_handle_count);
printf("CURL_MULTI_PERFORM: %d\n", cm);
并且在网络故障中"callback"
函数中没有任何内容:(
答案 0 :(得分:0)
CURLOPT_WRITEFUNCTION用于检索响应数据。在网络故障时,将没有数据。所以不会调用回调。要识别网络故障转移,您必须使用curl_multi_perform的返回码。您可以创建自己的回调函数,并在返回代码(cm)不等于CURLM_OK时调用它。要获得回调功能,您可以保存功能指针,然后调用它。
char ErrorStr[200];
//将调用此函数
void OnError(CURLMcode errorCode, char* Error)
{
}
//在你的代码中
CURLMcode res;
do{
res = curl_multi_perform(curlm, &count);
}while(res == CURLM_CALL_MULTI_PERFORM);
if(res != CURLM_OK)
{
slprintf(ErrorStr, 200, "curl_multi_perform() failed: %s\n",
curl_multi_strerror(res));
OnError(res, ErrorStr);
}