summaryrefslogtreecommitdiff
path: root/bucky2/bin/listener.pl
diff options
context:
space:
mode:
Diffstat (limited to 'bucky2/bin/listener.pl')
-rwxr-xr-xbucky2/bin/listener.pl65
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";
+
+ }
+ }
+ }
+ }
+