Написал небольшой перл, который по идеи должен отправлять сообщения раз в 2 секунды, и одновременно распечатывать все что приходит с сервера.
Код: Выделить всё
#!/usr/bin/perl
use threads;
use IO::Socket;
$sock = new IO::Socket::INET(PeerAddr => localhost,
PeerPort => 555,
Proto => 'tcp') or die "Can't connect\n";
push @threads, threads->create(\&msoutput, out); #создать поток для отправки
push @threads, threads->create(\&msinput, inp); #создать поток для приема
foreach my $thread (@threads) {
$thread->join();
}
sub msoutput { #поток для отправки
while (1){
$sock->send("ping\n");
sleep 2;
}
}
sub msinput { #поток приема
while ($input=<$sock>) {
print $input;
}
}Для теста этого всего написал другой перл, который при приходе сообщения отправляет ответ.
Код: Выделить всё
#!/usr/bin/perl -w
use IO::Socket::INET;
$server = IO::Socket::INET->new(Listen => SOMAXCONN,
Reuse => 1,
LocalAddr => 'localhost',
LocalPort => 555,
Proto => 'tcp') or die "Server error\n";
while ($client = $server->accept()) {
$client->autoflush(1);
while ($message = <$client>) {
print "$message";
print $client "OK\n";
}
}По идеи все правильно, но получаем:
Код: Выделить всё
E:\perl\irc>perl client
OK
Terminating on signal SIGINT(2)Т.е. вместо того чтобы был бесконечный цикл, выполняется все только лишь один раз, но почему?