server.pl: use IO::Socket::INET; use threads; use strict; my $server = new IO::Socket::INET(Proto => "tcp", LocalPort => 7001, Listen => 5) || die "failed to establish socket\n"; while (1) { my $client = $server->accept; threads->create(\&client_handle, $client); } sub client_handle { my $client = shift; while (1) { my $line = <$client>; chomp $line; print $client $line + 1, "\n"; } } client.pl: use strict; use IO::Socket; use threads; use threads::shared; my $numClients = shift; my %thread_status : shared; my $server_status : shared = 'threading'; $| = 1; print "Creating $numClients clients\n"; for (my $i=0; $i<$numClients; $i++) { my $socket = IO::Socket::INET->new(Proto => "tcp", PeerAddr => "localhost", PeerPort => 7001) || print "Socket creation error: $!\n"; threads->new(\&handle_client,$socket,$i)->detach; print "."; } print "\nAll Created\n"; sleep 1; $server_status = 'ready'; ; #<------------------------------------------------------------ handle_client --> sub handle_client { my ($socket,$clientNum) = @_; while ($server_status eq 'threading') { sleep 1 } print $socket "1\n"; while (1) { my $line = <$socket>; chomp $line; print "$clientNum <<== $line\n"; print $socket $line + 1, "\n"; sleep 1; } return; }