c - 无论如何要避免在 libcurl 中循环监视多句柄?

标签 c linux libcurl

我已经从 libcurl 主页上阅读了一些示例。当通过 curl_multi_perform 下载时,它总是使用循环监控多句柄,如下所示:

curl_multi_add_handle(multi_handle, easy_handle);
do {
    curl_multi_wait(…);
    curl_multi_perform(multi_handle, &still_running);
} while (still_running);

这让我在程序部分阻塞

我希望 libcurl 在 easy_handle 的任何一个下载完成后做回调

例如:

  • 服务器可以接收请求并将请求解析为 multi_handle 异步下载。
  • 服务器在 multi_handle 下载时仍然可以接收请求。 这些是独立的(换句话说是异步的)

最佳答案

通常在循环中调用 curl_multi_perform 来完成所有与 curl 相关的任务,例如 http 事务。

您放置代码的方式不会实现使用 libcurl 的异步方式。有多种方法可以实现。

在典型的实现中,您将拥有主循环,您可能会在其中处理许多任务。例如

do
{
    execute task1
    execute task2
    .............
    execute taskn
}
while(condition)

在该循环中,您可以调用 curl_multi_perform

所以主循环看起来像

do
{
    execute task1
    execute task2
    .............
    execute taskn

    curl_multi_perform(curlm, &count);
}
while(condition)

这样您就可以完成所有任务并且 curl_multi_perform 会不时被调用,您将实现使用 libcurl 的异步方式。

请检查文档,根据某些返回值,您可能会避免调用 curl_multi_perform(我记得之前读过)。

关于c - 无论如何要避免在 libcurl 中循环监视多句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662072/

相关文章:

c - 为 connect() 函数设置超时 C 中的 tcp 套接字编程中断 recv()

c - 防止字符串化输出中出现空格

linux - 在 Perl 中打印 shell 命令的输出

python - 安装 OpenCV,没有名为 cv2.cv 的模块

curl - 哪个 HTTP 库更好? Wget、cUrl、LibWWW 还是……?

c - 我如何在centOS6上获得 `tcp option timestamp`

c# - ubuntu 中 kernel32.dll 的等价物是什么?

c - 如何使用 vc++2010 链接 libCURL 的最新稳定版本

c++ - 代码块 libcurl 链接问题 Windows 7

双重自由或腐败的代码