#!/usr/bin/perl -w use strict; use IO::Socket; use IO::Select; $| = 1; # Make program hot! my $sock = IO::Socket::INET->new(Proto => 'tcp', LocalAddr => '192.168.0.100', LocalPort => 7778, Broadcast => 1, Blocking => 0, Reuse => 1, Listen => 1) or die "Can't bind : $@\n"; my $sel = new IO::Select($sock, undef, undef, 0); print "Server now listening for connections!\n" if ($sock); while(my @queues = $sel->can_read()) { my @canWrite = $sel->can_write(); foreach my $obj (@queues) { my $new; if($obj == $sock) { # Create a new socket $new = $sock->accept; $sel->add($new); }else { # Process socket if (my $pid = fork()) { # parent: close the connection so we can # keep listening $sel->remove($obj); $obj->close(); }else { # child: deal with connection while ($obj) { if (defined($obj->recv(my $data, 1024))) { last if (($data =~ /^quit/i) || ($data eq "")); print STDOUT "Input detected is: $data\n"; foreach my $target (@canWrite) { $target->send($data) if ($target);; } }else{ last; } } # finished with the socket $sel->remove($obj); $obj->close; } } } }