簡體   English   中英

不處理 curl_multi_perform() 的返回碼 CURLM_CALL_MULTI_PERFORM 的影響

[英]Impact of not handling the return code CURLM_CALL_MULTI_PERFORM of curl_multi_perform()

我目前正在研究 libcurl multi API。

我很好奇如果我跳過檢查 curl_multi_perform() 中的 CURLM_CALL_MULTI_PERFORM 返回代碼會發生什么。

根據https://linux.die.net/man/3/curl_multi_perform

如果您收到 CURLM_CALL_MULTI_PERFORM,這基本上意味着您應該在 select() 執行更多操作之前再次調用 curl_multi_perform。 您不必立即執行此操作,但返回代碼意味着 libcurl 可能有更多數據可用於返回,或者在“滿意”之前可能有更多數據要發送。 請注意,curl_multi_perform(3) 僅在想要立即再次調用時才返回 CURLM_CALL_MULTI_PERFORM。 當一切正常並且沒有任何事情要立即完成時,它將返回 CURLM_OK 並且您需要等待“操作”,然后再次調用此 function。

有人有什么主意嗎? 我正在使用 libcurl 版本 7.65.3,我的驅動程序代碼使用 C 語言。 謝謝!

CURLM_CALL_MULTI_PERFORM自 curl 7.20 起已棄用,並且永遠不會返回,如 10 年前記錄的那樣。

棄用的原因是很少正確使用該功能,存在許多錯誤和誤解。 因此,由於 7.20.0 CURLM_CALL_MULTI_PERFORM 不再存在。

我建議您查閱官方手冊curl_multi_perform而不是 3rd 方手冊頁。

這是curl_multi_perform()有趣的部分:

  data = multi->easyp;
  while(data) {
    CURLMcode result;
    SIGPIPE_VARIABLE(pipe_st);

    sigpipe_ignore(data, &pipe_st);
    result = multi_runsingle(multi, &now, data);
    sigpipe_restore(&pipe_st);

    if(result)
      returncode = result;

    data = data->next; /* operate on next handle */
  }

正如它所說,有些數據不會被處理(通過multi_runsingle() ),這取決於你在飛行中擁有什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM