Мое приложение использует curl_multi_select, чтобы ждать завершения звонков. Тайм-аут по умолчанию в curl_multi_select устанавливается в 1 секунду. Для данного URL-адреса этот вызов немедленно возвращается в Linux, но ждет полного 1-секундного тайм-аута в OSX.Как предотвратить зависание curl_multi_select от osx?
К сожалению, изменение тайм-аута в коде на самом деле не является вариантом в моей ситуации - мне нужен способ изменения конфигурации компьютера или использования разных php-модулей/exes.
В обоих операционных системах Linux и OSX работает PHP 5.3.8. Кажется, что-то связано с тем, что OSX обрабатывает сокеты и сам вызов select(), который отличается от Linux.
Вот что делает завиток вызов:
'url' => string 'HTTP://172.19.105.171:8070 <SNIPPED> '... (length=1439)
...
'namelookup_time' => float 1.001309
А вот что выбрать вызов выглядит как с помощью dtruss:
sudo dtruss -a -n httpd > dtruss.txt.2 2>&1
PID/THRD RELATIVE ELAPSD CPU SYSCALL(args) = return
...
21524/0x17136: 14369 37 31 connect_nocancel(0xA, 0x7FFF649DB9F8, 0x6A) = 0 0
21524/0x17136: 14383 15 10 sendto_nocancel(0xA, 0x7FAA786E4AD0, 0x1C) = 28 0
20285/0x8d8d: 755608 1001045 16 select(0x0, 0x0, 0x0, 0x0, 0x7FFF64353A70) = 0 0
Обратите внимание, что выбор вызова берет 1001045 microsecs, что 1 второй ,
Итак - это связано с тем, как OSX обрабатывает розетки? Это что-то, что я мог бы изменить с помощью другой опции сборки в PHP/Curl? Или есть что-то, что я могу изменить в своей сетевой конфигурации, чтобы сделать вызов select() быстрее?
Это оригинальный вопрос, который я имел, прежде чем я сузили его к текущему вопросу:
PHP/curl: namelookup_time/dns slowing requests
Другие исследования:
http://www.somacon.com/p537.php
http://svn.php.net/viewvc/php/php-src/trunk/ext/curl/multi.c?view=markup (curl_multi_select исходный код)
Спасибо за предложение, но, к сожалению, я не могу изменить код. – vaughnkoch