use strict; use warnings; use IO::Socket; use IO::Select; my $server = IO::Socket::INET->new( Proto => 'tcp', LocalPort => shift || 1234, Listen => 5, Timeout => 3 * 60, Reuse => 1, ); die "server\n$!\n" if not defined $server; my $selector = IO::Select->new($server); my $data; my $curr; while (1) { for my $sock ($selector->can_read()) { if ($sock == $server) { my $client = $server->accept(); $selector->add($client); $data = "New client (ip: ".$client->peerhost().") joined\n"; $curr = 0; } else { $data = <$sock>; $curr = $sock; } for my $sock ($selector->can_write()) { next if (($sock == $server) || ($sock == $curr)); print $sock $data; } } }