All pastes #280752 Raw Edit

Someone

public text v1 · immutable
#280752 ·published 2006-12-16 03:34 UTC
rendered paste body
#!/usr/bin/perl -w
use IO::Socket;
use Net::hostent;		# for OO version of gethostbyaddr
use threads;

$PORT = 9000;			# pick something not in use
$count = 0;
my @server;
serv:
$count++;
$server[$count] = IO::Socket::INET->new( Proto     => 'tcp',
                                 LocalPort => $PORT,
                                 Listen    => SOMAXCONN,
                                 Reuse     => 1);

die "can't setup server" unless $server[$count];
print "[Server $0 accepting clients]\n";

if ($client = $server[$count]->accept()) { $thr1 = threads->new(\&handle); }
goto serv;
#if ($client = $server[count->accept()) { $thr2 = threads->new(\&handle); }
$return_val = $thr1->join;
print "$return_val\n";
while (1) {
}

# while ($client = $server->accept()) {
#   $client->autoflush(1);
#   print $client "Welcome to $0; type help for command list.\r\n";
#   $hostinfo = gethostbyaddr($client->peeraddr);
#   printf "[Connect from %s]\n", $hostinfo ? $hostinfo->name : $client->peerhost;
#   print $client "Command1 \r\n";
#   while ( <$client>) {
#     next unless /\S/;	     # blank line
#     if    (/quit|exit/i)    { last;                                     }
#     elsif (/date|time/i)    { printf $client "%s\r\n", scalar localtime;  }
#     elsif (/who/i )         { print  $client `who 2>&1`;                }
#     elsif (/cookie/i )      { print  $client `/usr/games/fortune 2>&1`; }
#     elsif (/motd/i )        { print  $client `cat /etc/motd 2>&1`;      }
#     else {
#       print $client "Commands: quit date who cookie motd\r\n";
#     }
#   } continue {
#      print $client "Command2 \r\n";
#   }
#   close $client;
# }


sub handle {
  $client->autoflush(1);
  print $client "Welcome to $0; type help for command list.\r\n";
  $hostinfo = gethostbyaddr($client->peeraddr);
  printf "[Connect from %s]\n", $hostinfo ? $hostinfo->name : $client->peerhost;
  print $client "Command1 \r\n";
  while ( <$client>) {
    next unless /\S/;	     # blank line
    if    (/quit|exit/i)    { last;                                     }
    elsif (/date|time/i)    { printf $client "%s\r\n", scalar localtime;  }
    elsif (/who/i )         { print  $client `who 2>&1`;                }
    elsif (/cookie/i )      { print  $client `/usr/games/fortune 2>&1`; }
    elsif (/motd/i )        { print  $client `cat /etc/motd 2>&1`;      }
    else {
      print $client "Commands: quit date who cookie motd\r\n";
    }
  } continue {
     print $client "Command2 \r\n";
  }
  close $client;
  return 1;
}