LJ Archive CD

Listing 5. server2way.pl

#!/usr/bin/perl -w
# server2way.pl - a server that reads from
# and writes to a client
use strict;
use IO::Socket;
use Sys::Hostname;
my $sock = new IO::Socket::INET(
                   LocalHost => 'localhost',
                   LocalPort => 7890,
                   Proto     => 'tcp',
                   Listen    => SOMAXCONN,
                   Reuse     => 1);
$sock or die "no socket :$!";
STDOUT->autoflush(1);
my($new_sock, $buf);
while ($new_sock = $sock->accept()) {
    # got a client connection, so read
    # line by line until end-of-file
    while (defined($buf = <$new_sock>)) {
   # respond to client request using
   # a cleverly disguised switch
        # statement
   foreach ($buf) {
            /^HELLO$/ and
                 print($new_sock "Hi\n"),
                 last;
            /^NAME$/  and
                 print($new_sock hostname(),
                       "\n"),
                 last;
       /^DATE$/  and
                 print($new_sock
                       scalar(localtime),
                       "\n"),
                 last;
       # default case:
       print $new_sock "DEFAULT\n";
   }
    }
    close $new_sock;
}

LJ Archive CD