Perl цикл и сокет

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

VelloRibbo
Сообщения: 220
ОС: Фетровая

Perl цикл и сокет

Сообщение VelloRibbo »

Хотелось бы сделать программу которая считает секунды в цикле, при этом слушает сокет на определённом порту, когда я telnet соединяюсь с сокетом цикл бы показывал сколько секунд он насчитал и завершался, как сделать так что бы цикл продолжал считать секунды вне зависимости от того есть соединение или нет... у меня получается только то что скрипт ожидает соединения и при соединение выводит данные но сам цикл при этом не крутиться....

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

#!/usr/bin/perl -w
use IO::Socket;
$socket = IO::Socket::INET->new(LocalPort => 31337, Reuse => 1, Listen => 10) || die "error $!\n";
$i=0;
while(1) {
        if ($client = $socket->accept()) {
          print $client "Цикл $i\n";
        }
        $i++;
        sleep(1);
}

Как сделать подскажите(
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Perl цикл и сокет

Сообщение pcodr »

Дело в том что при отсутствии соединения метод accept блокируется до тех пор пока соединение не поступит. Соответственно при отсутствии соединения цикл дальше вызова метода accept не продвинется, а продвинется лишь при установке и окончании соединения.
Проще всего раз в секунду увеличивать счетчик по сигналу таймера.
Почитайте документацию по функции alarm:
perldoc -f alarm
remote system type is unix
Спасибо сказали: