2015-01-21 1 views
2

Пытаюсь 2 параллельное соединение с curl_multi:Libcurl Hostname не найден в кэше DNS

CURL *http_handle; 
CURL *http_handle2; 
CURLM *multi_handle; 

int still_running; /* keep number of running handles */ 

http_handle = curl_easy_init(); 
http_handle2 = curl_easy_init(); 

/* set options */ 
curl_easy_setopt(http_handle, CURLOPT_URL, "http://216.58.208.46"); 

/* set options */ 
curl_easy_setopt(http_handle2, CURLOPT_URL, "http://213.180.204.62"); 

curl_easy_setopt(http_handle, CURLOPT_VERBOSE, 1L); 
curl_easy_setopt(http_handle2, CURLOPT_VERBOSE, 1L); 

/* init a multi stack */ 
multi_handle = curl_multi_init(); 

/* add the individual transfers */ 
curl_multi_add_handle(multi_handle, http_handle); 
curl_multi_add_handle(multi_handle, http_handle2); 

/* we start some action by calling perform right away */ 
curl_multi_perform(multi_handle, &still_running); 

while(still_running); 

curl_multi_cleanup(multi_handle); 

curl_easy_cleanup(http_handle); 
curl_easy_cleanup(http_handle2); 

return 0; 

и получить консольный вывод:

  • перестроен URL для: http://216.58.208.46/
  • Hostname был НЕ найденный в кэше DNS
  • Пытающий 216.58.208.46 ...
  • Восстановленный URL-адрес: http://213.180.204.62/
  • Hostname не найден в кэше DNS
  • Попытка 213.180.204.62 ...

все работает отлично, если я использую curl_easy_perform, но я не с curl_multi_perform так есть ошибка в Libcurl или я что-то не так? моя версия libcurl - 7.37.1

ответ

1

Вы, кажется, неправильно поняли, как работает curl_multi_perform. Он выполняет только очень небольшую часть передачи, а затем возвращается, и вам нужно продолжать называть его до тех пор, пока все переводы не будут выполнены. (Не в режиме «занят», вы также должны дождаться «действия», прежде чем вы вызовете его снова.)

Пример кода, показывающий две параллельные передачи, выполненные с использованием интерфейса, представляет собой пример multi-double на веб-сайте curl.

Тексты, не найденные в кэше DNS, являются просто нежелательными и удаляются в будущей версии, а текст «перестроить» просто информирует вас о том, как libcurl автоматически фиксировал URL-адрес и что он использует эту фиксированную версию в будущем , Часть «Trying» - это libcurl, начинающая подключение к хостам, но так как вы никогда не называете ее снова, она не может закончить работу!

 Смежные вопросы

  • Нет связанных вопросов^_^