ФорумПрограммированиеPHP для идиотов → Сокеты и мульти-пингование

Сокеты и мульти-пингование

  • datri

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 18 июня 2012 г. 17:09

    Приветствую!
    Задача была такова. Создать скрипт для пингования ресурсов. Ресурсов много, поэтому нужна "мультипоточность", то есть использование 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 остаётся пустой, хотя пакет точно отсылается.

    Может есть идеи? Рыл в интернете несколько часов - ничего не нашёл.
    Спасибо заранее.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 18 июня 2012 г. 17:26, спустя 16 минут 56 секунд

    $recv остаётся пустой, хотя пакет точно отсылается.

    Может есть идеи? Рыл в интернете несколько часов - ничего не нашёл.
    Спасибо заранее.

    боян. гугли и думай дальше. пробелма как дважды два
    Сапожник без сапог
  • datri

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 18 июня 2012 г. 17:56, спустя 30 минут 20 секунд

    Намекни хоть в какую сторону гуглить-то?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 18 июня 2012 г. 18:05, спустя 9 минут 7 секунд

    datri, ты используешь асинхронный режим работы с сокетом, а получить данные пытаешься СРАЗУ ЖЕ. такого не бывает. тебе надо вешаться на сокет или чо там в пхп сокетах.
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!