diff options
Diffstat (limited to 'bucky2/bin/listener.pl')
| -rwxr-xr-x | bucky2/bin/listener.pl | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/bucky2/bin/listener.pl b/bucky2/bin/listener.pl new file mode 100755 index 0000000..0f0f2d9 --- /dev/null +++ b/bucky2/bin/listener.pl @@ -0,0 +1,65 @@ +#!/usr/bin/perl + use IO::Socket; + use IO::Select; + + # Create a socket to listen on. + # + my $listener = + IO::Socket::INET->new( LocalPort => 8008, Listen => 5, Reuse => 1 ); + + die "Can't create socket for listening: $!" unless $listener; + print "Listening for connections on port 8008\n"; + + my $readable = IO::Select->new; # Create a new IO::Select object + $readable->add($listener); # Add the listener to it + + while(1) { + + # Get a list of sockets that are ready to talk to us. + # + my ($ready) = IO::Select->select($readable, undef, undef, undef); + foreach my $s (@$ready) { + + # Is it a new connection? + # + if($s == $listener) { + + # Accept the connection and add it to our readable list. + # + my $new_sock = $listener->accept; + $readable->add($new_sock) if $new_sock; + + print $new_sock "Welcome!\r\n"; + print "connection :-o\n\n"; + + } else { # It's an established connection + + my $buf = <$s>; # Try to read a line + + # Was there anyone on the other end? + # + if( defined $buf ) { + + # If they said goodbye, close the socket. If not, + # echo what they said to us. + # + if ($buf =~ /(good)?bye/i) { + print $s "See you later!\n"; + $readable->remove($s); + $s->close; + } else { + print $s "You said: $buf\n"; + print "$buf\n"; + } + + } else { # The client disconnected. + + $readable->remove($s); + $s->close; + print STDERR "Client Connection closed\n"; + + } + } + } + } + |
