Приветствую!
Задача была такова. Создать скрипт для пингования ресурсов. Ресурсов много, поэтому нужна "мультипоточность", то есть использование socket_set_nonblock.
Скрипт есть.
Проблема в следующем. При ОТКЛЮЧЕНИИ socket_set_nonblock пингование происходит, и функция socket_recvfrom возвращает правильный ответ с пингуемого ресурса. Но при ВКЛЮЧЕНИИ socket_set_nonblock эта же функция ничего не возвращает.
Грубый пример кода без использования циклов. Но суть именно такова.
$port=0;
$resource='некий IP';
$packet='некий 64-х битный пакет';
$socket=socket_create(AF_INET, SOCK_RAW, getprotobyname('icmp'));
socket_set_nonblock($socket);
socket_sendto($socket, $packet, strlen($packet), 0, $resource, $port);
$recv='';
socket_recvfrom($socket, $recv, 65535, 0, $resource, $port);
$recv = unpack('C*', $recv);
$recv остаётся пустой, хотя пакет точно отсылается.
Может есть идеи? Рыл в интернете несколько часов - ничего не нашёл.
Спасибо заранее.