#!/usr/bin/perl use warnings; use strict; use IO::Socket; use IO::Select; my @sockets; my $machine_addr = 'localhost'; my $main_sock = new IO::Socket::INET(LocalAddr=>$machine_addr, LocalPort=>1200, Proto=>'tcp', Listen=>3, Reuse=>1, ); die "Could not connect: $!" unless $main_sock; print "Starting Server\n"; my $readable_handles = new IO::Select(); $readable_handles->add($main_sock); while (1) { ###################################################################### #this line caused 100% cpu usage ( thanks to BrowserUk for pointing this out) #my ($new_readable) = IO::Select->select($readable_handles, undef, undef, 0 ); #should be my ($new_readable) = IO::Select->select($readable_handles, undef, undef, undef ); #################################################################### foreach my $sock (@$new_readable) { if ($sock == $main_sock) { my $new_sock = $sock->accept(); $readable_handles->add($new_sock); } else { my $count = sysread $sock, my $buf, 1024; print "$count\n"; if ($buf) { print "$buf\n"; my @sockets = $readable_handles->can_write(1); print "@sockets\n"; #print $sock "You sent $buf\n"; foreach my $sck(@sockets){print $sck "$buf\n";} } else { $readable_handles->remove($sock); close($sock); } } } } print "Terminating Server\n"; close $main_sock; getc();