[英]When does libcurl's curl_multi_perform start the transfer?
我試圖了解curl_multi_perform
的功能,以便可以在我的項目中使用它。 我在https://gist.github.com/clemensg/4960504找到了示例代碼。
以下是我懷疑的代碼:
for (i = 0; i < CNT; ++i) {
init(cm, i); // this is setting options in curl easy handles.
}
// I thought this statement will start transfer.
//A-- curl_multi_perform(cm, &still_running);
sleep(5); // put this to check when transfer starts.
do {
int numfds=0;
int res = curl_multi_wait(cm, NULL, 0, MAX_WAIT_MSECS, &numfds);
if(res != CURLM_OK) {
fprintf(stderr, "error: curl_multi_wait() returned %d\n", res);
return EXIT_FAILURE;
}
/*
if(!numfds) {
fprintf(stderr, "error: curl_multi_wait() numfds=%d\n", numfds);
return EXIT_FAILURE;
}
*/
//B-- curl_multi_perform(cm, &still_running);
} while(still_running);
我的理解是,當curl_multi_perform
時,傳輸開始,但是在上面的代碼中,標簽A處的curl_multi_perform
不啟動傳輸。 我檢查了wireshark日志。 當控件移過sleep()
語句時,我看到第一個日志輸出。
我什至嘗試了以下代碼:
for (i = 0; i < CNT; ++i) {
init(cm, i); // this is setting options in curl easy handles.
curl_multi_perform(cm, &still_running);
sleep(5);
}
但是結果是一樣的。 當控件處於此循環中時,在wireshark中沒有看到任何日志,但是,一旦我開始在wireshark中看到日志,它們之間的間隔為5秒。
除了這些疑問之外,我還有其他疑問:
curl_multi_perform
? curl_multi_perform
嗎? 幫助表示贊賞。 謝謝
curl_multi_perform以非阻塞方式工作。 它會在不阻塞的情況下盡其所能,然后返回,並期望在需要時再次被調用。 因此,第一個調用最有可能開始解析URL中使用的名稱,然后第二個或第三個調用可能開始實際的傳輸或其他操作。 這樣做的目的是使應用程序不必關心執行它的確切函數調用號。
然后您繼續調用它,直到完成所有傳輸。
我試圖在我即將出版的(免費和在線)書的一章中解釋這一概念: 使用“多”界面駕駛
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.