curl timeout less than 1000ms always fails?

匿名 (未验证) 提交于 2019-12-03 01:39:01

问题:

This code always fails (i.e., $result is Boolean false):

     $ch = curl_init();      curl_setopt($ch, CURLOPT_URL, $path);      curl_setopt($ch, CURLOPT_HEADER, TRUE);      curl_setopt($ch, CURLOPT_NOBODY, TRUE);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);      $curl_version = curl_version();       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999);       $result = curl_exec($ch);      curl_close($ch); 

This code always succeeds (i.e., $result is a string containing the header):

     $ch = curl_init();      curl_setopt($ch, CURLOPT_URL, $path);      curl_setopt($ch, CURLOPT_HEADER, TRUE);      curl_setopt($ch, CURLOPT_NOBODY, TRUE);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);      $curl_version = curl_version();       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);       $result = curl_exec($ch);      curl_close($ch); 

The only difference is that I've changed the timeout from 999ms to 1000ms.

This must be either a bug in curl or some sort of minimum in the documentation for connection timeouts that I missed. Which is it? My money is on the latter.

回答1:

from: http://www.php.net/manual/en/function.curl-setopt.php

The number of milliseconds to wait while trying to connect. Use 0 to wait indefinitely. If libcurl is built to use the standard system name resolver, that portion of the connect will still use full-second resolution for timeouts with a minimum timeout allowed of one second.



回答2:

Another way of dealing with this would be to set the CURLOPT_NOSIGNAL option to 1 in addition to the CURLOPT_CONNECTTIMEOUT_MS. See http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html for more info.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!