use IO::Socket; use IO::Select; $main_socket = new IO::Socket::INET (LocalHost => 'localhost', LocalPort => 1200, Listen => 5, Proto => tcp, Reuse => 1); die "Socket not created: $!\n" unless ($main_socket); $readable_handles = new IO::Select(); $readable_handles->add($main_socket); while(1){ #select() blocks until a socket is ready to be read ($new_readable) = IO::Select->select($readable_handles,undef,undef,0); #We now have at least one readable handle. foreach $sock (@$new_readable){ if ($sock == $main_socket){ $new_sock = $sock->accept(); #new connection, add to list. #May not be readable yet. $readable_handles->add($new_sock); } else { #check to see if socket closed $buf = <$sock>; if($buf) { #Do stuff with $buf } else { #socket was closed $readable_handles->remove($sock); close($sock); } } } }