我想了解curl_multi_perform
的功能,以便我可以在我的項目中使用它。我在https://gist.github.com/clemensg/4960504找到了一個示例代碼。何時libcurl的curl_multi_perform開始傳輸?
下面是我的疑問是代碼:
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
被稱爲傳送開始,但在上面的代碼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
,同時在呼叫之間添加句柄 ?
幫助讚賞。 謝謝
我想打電話一次,開始爲相關的簡單的手柄和其他調用多全部轉讓要知道還有多少請求尚未完成。我不明白每次調用multi_perform如何執行不同的任務。 – Jardanian
libcurl保留每次傳輸的確切狀態,以便它知道它在哪裏以及它應該如何繼續從每個傳輸 –