Perl: select всегда возвращает массив нулевого размера

Модератор: Модераторы разделов

IMB
Сообщения: 2565
ОС: Debian

Perl: select всегда возвращает массив нулевого размера

Сообщение IMB »

Доброго дня!
Код скрипта:

Код: Выделить всё

use IO::Socket::INET;
use IO::Select;

my $socket = IO::Socket::INET->new(PeerAddr => inet_ntoa(INADDR_BROADCAST),
                                    PeerPort => $server_port,
                                    LocalPort => $client_port,
                                    LocalAddr => $local_address,
                                    Proto => 'udp',
                                    Type => SOCK_DGRAM,
                                    Broadcast => 1)
                                    or die "Failed configure socket, $!!";
my $select = IO::Select->new($socket) or die "Failed configure select, $!";

while ($count) {
    my @ready;
    print "Send request\n";
    $socket->send(pack("CCCC", 2, 1, 0, 0));
    @ready = $select->can_read($timeout);
    print '@ready size ' . scalar @ready . "\n";
..........
}

Вывод:

Код: Выделить всё

Send request
@ready size 0

По сниферу я вижу свои запросы и ответы сервера, netstat подтверждает, что скрипт слушает нужный порт.
Вопрос - как необходимо изменить код для корректной работы?
Спасибо.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20999
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Perl: select всегда возвращает массив нулевого размера

Сообщение Bizdelnick »

$timeout слишком маленький?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Perl: select всегда возвращает массив нулевого размера

Сообщение IMB »

По-умолчанию использую 5 сек, и даже при малом значении $timeout ответы должны ловится если они приходят.
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Perl: select всегда возвращает массив нулевого размера

Сообщение IMB »

Хм, попробовал с IO::Poll, результат идентичный.
Спасибо сказали: