Решил разобраться с потоками и сокетами на перле на примере простой задачки:
сервер создает сокет, клиенты подлючаются, посылают некие сообщения. Сервер их ловит и выводит у себя в STDOUT. Пока получился следующий код:
server:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
use threads;
$SIG{CHLD} = sub {wait ()};
sub listener {
my $client = shift;
while (defined (my $buf = <$client>)) {
print $buf;
}
}
my $server = new IO::Socket::INET (LocalHost => \'localhost\',
LocalPort => 5000,
Proto => \'tcp\',
Listen => SOMAXCONN,
Reuse => 100
);
die "Server could not be created. Reason: $!" unless $server;
print "Server started\\n";
while (my $client = $server->accept()) {
print "New client registered\\n";
my $th = threads->create("listener", $client);
$th->join;
}
close ($server);
client:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
my $client = IO::Socket::INET->new("localhost:5000");
die "Client could not be created. Reason: $!" unless $client;
while (<>) {
print $client $_;
}
close ($client);
В связи с этим есть два вопроса:
1. Пока сервер может получать сообщения только от одного клиента. Другой клиент подключается только если прибить первого. Как их заставить работать одновременно
2. Как сделать, чтоб сервер мог тоже отправлять сообщения в выходной поток клиета (эхо)?
Заранее спасибо за помощь