シングルカールリクエストでカールエラー(タイムアウトエラー)メッセージをキャッチする方法を知っています。それは次のようなものです。マルチエラー環境でのカールエラー、つまりタイムアウトの捕捉方法
curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT_MS, 100);
res = curl_easy_perform(curl_handle);
resが、我々は我々がすべてのカールrequest.Howを追加するためにcurl_multi_add_handleを使用multicurl要求 を使用するときにそれを行う方法、それはCURLE_OPERATION_TIMEDOUT などのようないくつかのエラーですが、私は知りたい、その後curl_okされていない場合 タイムアウト時間とエラーメッセージの取得方法を設定してください。
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コードを使用しています。