тайм-аут curl меньше 1000ms всегда терпит неудачу?

этот код всегда терпит неудачу (т. е. $result логическое 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);

этот код всегда выполняется успешно (т. е. $result - строка, содержащая заголовок):

     $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);

единственная разница в том, что я изменил тайм-аут с 999ms на 1000ms.

это должно быть либо ошибка в curl, либо какой-то минимум в документации для таймаутов соединения, которые я пропустил. Что это? Я ставлю на последнее.

2 ответов


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

количество миллисекунд ожидания при попытке подключения. Используйте 0 для бесконечного ожидания. если libcurl построен для использования стандартного преобразователя системных имен, эта часть подключения по-прежнему будет использовать полное второе разрешение для таймаутов С минимальным таймаутом, разрешенным на одну секунду.


другой способ справиться с этим - установить CURLOPT_NOSIGNAL опция до 1 в дополнение к CURLOPT_CONNECTTIMEOUT_MS. См.http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html для получения дополнительной информации.