为什么要改变curl\u multi\u timeout()的返回值?

为什么要改变curl\u multi\u timeout()的返回值?,c,curl,libcurl,C,Curl,Libcurl,示例代码包含: 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; } 为什么电视秒缩短到1秒?为什么c

示例代码包含:

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;
}
为什么电视秒缩短到1秒?为什么curl\u multi\u timeout返回的值在除以1000后不按原样使用


假设上面有一个很好的理由,那么是否存在不将值剪裁为1秒的情况?这是什么情况?

代码只是设置了一个最长等待时间,以便稍后的调用进行选择。如果有什么区别的话,这看起来像一个bug。代码似乎在保护自己不受curl\u multi\u超时的不合理回答的影响。我的猜测是编码人员在想,如果curl timeout函数返回的值超过一分钟,那么就不要再等待了。。。然后开始打字,一分钟等于一秒钟。它可能应该这样做

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

mod by 1000是不必要的,因为curl\u multi\u timeout返回毫秒,因此如果tv\u sec为零,则表示返回的值在0-999范围内。

代码只是为以后的选择调用设置了最大等待时间。如果有什么区别的话,这看起来像一个bug。代码似乎在保护自己不受curl\u multi\u超时的不合理回答的影响。我的猜测是编码人员在想,如果curl timeout函数返回的值超过一分钟,那么就不要再等待了。。。然后开始打字,一分钟等于一秒钟。它可能应该这样做

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

mod by 1000是不必要的,因为curl\u multi\u timeout返回毫秒,因此如果tv\u sec为零,则表示返回值在0-999范围内。

但tv\u usec为微秒。如果curl_timeo为毫秒,则需要乘以1000。只是国防部似乎错了。是吗?@Paul:不,tv_usec也是毫秒-你不需要额外的1000倍。如果您使用的是微秒,那么您将使用具有微秒tv_nsec成员的struct timespec。代码使用较旧的结构timeval。不,tv_usec实际上是微秒:“u”是micro的SI前缀。除其他地方外:这也意味着mod是正确的:1001ms=1s curl\u timeo/1000加上1000ms curl\u timeo%1000*1000。@Paul:你说得对,这是微秒1/1000000秒。curl timeout返回值为千分之一,然后必须将其转换为毫秒,以便电视使用。。。乘以1000是正确的。我已经编辑了上面的代码来解释这一点,但是tv_usec是微秒。如果curl_timeo为毫秒,则需要乘以1000。只是国防部似乎错了。是吗?@Paul:不,tv_usec也是毫秒-你不需要额外的1000倍。如果您使用的是微秒,那么您将使用具有微秒tv_nsec成员的struct timespec。代码使用较旧的结构timeval。不,tv_usec实际上是微秒:“u”是micro的SI前缀。除其他地方外:这也意味着mod是正确的:1001ms=1s curl\u timeo/1000加上1000ms curl\u timeo%1000*1000。@Paul:你说得对,这是微秒1/1000000秒。curl timeout返回值为千分之一,然后必须将其转换为毫秒,以便电视使用。。。乘以1000是正确的。我已经编辑了上面的代码来解释这一点。