#c #libcurl #libevent
#c #libcurl #libevent ( событие )
Вопрос:
- Я реализовал несколько примеров с помощью libevent (multi-event)
- Дополнительно я добавляю
curl_easy_setopt(curl_easy, CURLOPT_TIMEOUT_MS, 10000)
; on_timeout
выполняйте обратный вызов, когда после 10000 мс, но мне нужен точныйcurl_easy
объект, которыйcurl_easy_setopt
вызывает;- Пробовал
check_multi_info
curl_multi_info_read
, но ничего не получил;
Как я могу узнать, какой curl_easy
тайм-аут? Спасибо!
Мой главный зацикливатель событий:
void HttpLooper::Run() {
CURLcode ret = curl_global_init(CURL_GLOBAL_ALL);
if (ret) {
LOG(ERROR) << "curl_global_init error: " << ret;
return;
}
event_timeout_ = evtimer_new(event_base_, on_timeout, this);
g_curl = curl_multi_init();
curl_multi_setopt(g_curl, CURLMOPT_SOCKETFUNCTION, handle_socket);
curl_multi_setopt(g_curl, CURLMOPT_SOCKETDATA, this);
curl_multi_setopt(g_curl, CURLMOPT_TIMERFUNCTION, start_timeout);
curl_multi_setopt(g_curl, CURLMOPT_TIMERDATA, this);
for (;;) {
StartDoTasks();
event_base_dispatch(event_base_);
if (!keep_running_)
break;
}
curl_multi_cleanup(g_curl);
event_free(event_timeout_);
curl_global_cleanup();
}
Комментарии:
1. Не уверен, но вы смотрели
CURLMOPT_TIMERDATA
?2. @TedLyngmo Спасибо за ваше предложение, я добавил свои коды основного цикла, смотрите, я добавил CURLMOPT_TIMERDATA opt в качестве параметров g_curl .