Решил разобраться с потоками и сокетами на перле на примере простой задачки:
сервер создает сокет, клиенты подлючаются, посылают некие сообщения. Сервер их ловит и выводит у себя в 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. Как сделать, чтоб сервер мог тоже отправлять сообщения в выходной поток клиета (эхо)?
Заранее спасибо за помощь