2015-01-21 45 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开始连接到主机,但由于您再也不会调用它,它不能完成它的工作!

相关问题