Время ожидания завивки менее 1000 мс всегда терпит неудачу?

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

Этот код всегда преуспевает (т.е. $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);

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

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

Ответ 1

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

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

Ответ 2

Другим способом борьбы с этим было бы установить параметр CURLOPT_NOSIGNAL равным 1 в дополнение к CURLOPT_CONNECTTIMEOUT_MS. Подробнее см. http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html.