#!/usr/bin/perl use strict; use warnings; use IO::Socket::INET; use threads; use threads::shared; my @clients : shared; @clients=(); my $socket=new IO::Socket::INET( LocalAddr=>'localhost', LocalPort=>7777, Proto=>'tcp', Timeout=>7200, Listen=>7, Reuse=>1 ) || die "$!\n"; while(1){ my $client; $client=$socket->accept; my $peerhost=$client->peerhost; my $peerport=$client->peerport; print "$peerhost:$peerport\n"; my $f_client=fileno $client; push(@clients,$f_client); my $thr=threads->create(\&accept,$client,$peerhost,$f_client); } sub accept{ my ($client1,$peerhost1,$f_client1)=@_; if($client1->connected){ while(<$client1>){ foreach my $fn(@clients){ open(my $fh, ">&=$fn") || die "$!\n"; print $fh "$_"; } } } }