curl timeout less than 1000ms always fails?
Asked Answered
O

2

9

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.

Omalley answered 2/11, 2011 at 21:32 Comment(0)
S
13

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.

Sinkhole answered 2/11, 2011 at 21:43 Comment(2)
Ok, I saw this in the documentation but I really don't understand what it means and how I can make this to work with a smaller value than 1000. Any help you can give me would be appreciated, thanks!Ticklish
You have to compile libcurl for yourself, using --enable-threaded-resolver and then compile curl extension for php against it.Sinkhole
P
4

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.

Pawl answered 20/1, 2015 at 10:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.