c - 为什么要改变 curl_multi_timeout() 的返回值?

标签 c curl libcurl

This示例代码包含:

curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
  timeout.tv_sec = curl_timeo / 1000;
  if(timeout.tv_sec > 1)
    timeout.tv_sec = 1;
  else
    timeout.tv_usec = (curl_timeo % 1000) * 1000;
}

为什么 tv_sec 被裁剪为 1 秒?为什么 curl_multi_timeout() 返回的值不按原样使用(除以 1000 后)?

假设上述情况有充分的理由,那么是否存在您不会将该值限制为 1 秒的情况?那是什么情况?

最佳答案

代码只是为稍后调用 select() 设置了最长等待时间。如果有的话,这看起来像一个错误。看起来代码正在保护自己免受来自 curl_multi_timeout() 的不合理答案的影响。我的猜测是编码员在想,“如果 curl 超时函数返回的时间超过一分钟,那么就不要再等了。” ...然后将一分钟打错为一秒。它可能应该做

if (timeout.tv_sec > 60) {
    timeout.tv_sec = 60;
else if (timeout.tv_sec == 0) {
    timeout.tv_usec = curl_timeo * 1000;
}

由于 curl_multi_timeout() 返回的是毫秒,因此不需要 1000 的模数,因此如果 tv_sec 为零,则意味着返回值在 0 - 999 的范围内.

关于c - 为什么要改变 curl_multi_timeout() 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852784/

相关文章:

c - 函数需要异常长的时间才能返回

c - GtkSourceView/GtkSourceBuffer - 如何用红色标记线条并显示图标

c - 我认为 sizeof 的参数是针对可变长度数组求值的

django - request.META 不包含从curl -H 传递的 header

php - PHP 中的 cURL 下载进度

ubuntu - 如何从终端从谷歌驱动器下载大文件? (gdown 不起作用)

facebook - 为什么查找 ssl 证书的 curl 失败会间歇性地工作?

c++ - 链接到 C++ 库的 Makefile

c++ - 如何将libcurl构建为静态库并在项目中使用?

c++ - printf 如何知道格式参数的长度?