Libcurl multi с libevent: как поддерживать единый механизм тайм-аута curl_easy?

#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 .