如何捕捉卷曲错误,即在多卷环境中超时

问题描述:

我知道如何在单卷曲请求中捕捉卷曲错误(超时错误)消息。它如下所示。如何捕捉卷曲错误,即在多卷环境中超时

curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT_MS, 100); 
    res = curl_easy_perform(curl_handle); 

如果水库不curl_ok那么它就像CURLE_OPERATION_TIMEDOUT 等一些错误,但我想知道,怎么做,当我们使用在这里我们使用curl_multi_add_handle multicurl要求 新增的每个卷曲request.How到设置 超时时间以及如何捕获错误消息。

bool cuev_emit(struct curlev *cuev, char *url, struct curl_slist *headers, 
curlev_cb_t cb, void *cb_data) 
{ 
struct curlex *ex = NULL; 
CURL *easy = curl_easy_init(); 
CURLMcode code; 
if (!easy) { 
    xsyslog(LOG_WARNING, "curl_easy_init() failed for url '%s' (errno: %d)", 
      url, errno); 
    return false; 
} 
curl_easy_setopt(easy, CURLOPT_URL, url); 
curl_easy_setopt(easy, CURLOPT_VERBOSE, 0L); 

curl_easy_setopt(easy, CURLOPT_SSL_VERIFYPEER, 0L); 

curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, _curl_write_cb); 
if (cb) { 
    ex = calloc(1, sizeof(*ex)); 
    if (!ex) { 
     xsyslog(LOG_WARNING, "cuev_emit() failed: calloc(%d) with errno: %d", 
       (int)sizeof(*ex), errno); 
     curl_easy_cleanup(easy); 
     return false; 
    } 
    curl_easy_setopt(easy, CURLOPT_WRITEDATA, ex); 
    curl_easy_setopt(easy, CURLOPT_PRIVATE, ex); 
} else { 
    curl_easy_setopt(easy, CURLOPT_WRITEDATA, NULL); 
    curl_easy_setopt(easy, CURLOPT_PRIVATE, NULL); 
} 

if (headers) { 
    /* TODO: добавить хидеры */ 
} 

if ((code = curl_multi_add_handle(cuev->multi, easy)) != CURLM_OK) { 
    xsyslog(LOG_WARNING, "curl_multi_add_handle() failed for url '%s', code: %d", 
      url, code); 
    curl_easy_cleanup(easy); 
    return false; 
} 
return true; 
    } 

代码的主要部分在上面。我正在使用https://gist.github.com/bhardwaj75/7600b67726ae2cdbfcf8c9c74300ab69#file-libvev-curl-c的代码。

关键是curl_multi_info_read()函数返回使用多接口时完成传输的信息。在curl_multi_perform()后调用并超时传输将设置该错误代码。

另请参阅卷页手册中的Driving with the multi interface章节或使用示例的多界面例如multi-app.c