2015-01-21 43 views
2

我試圖用curl_multi 2並聯:libcurl的主機名未在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; 

,並得到控制檯輸出:

一切完美,如果我使用curl_easy_perform但我不curl_multi_perform所以是有libcurl中的錯誤或我做錯了什麼?我的libcurl版本是7.37.1

回答

1

您好像誤解了curl_multi_perform的工作原理。它只做一小部分的轉移,然後返回,並且您需要繼續調用它,直到完成所有轉移。 (不是在繁忙循環中,在再次調用之前,您還應該等待「動作」。)

示例代碼顯示使用多接口完成兩個並行傳輸的例子是捲曲網站上的multi-double示例。

DNS緩存中找到的關於不文本只是垃圾,並在未來的版本中被刪除,而「重建」文本只是告訴你如何libcurl的自動修復的URL,你和它使用的是固定的版本前進。 「嘗試」部分是libcurl開始連接到主機,但由於您再也不會調用它,它不能完成它的工作!

相關問題