#!/usr/bin/perl -w package TheServer; use strict; use IO::Select; use Net::Server::PreForkSimple; our @ISA = qw(Net::Server::PreForkSimple); my ($client, $io); # Start the server on port 8000. # Allow 5 connections, run as user/group 'apache' TheServer->run( port => 8000, max_servers => 5, user => 'apache', group => 'apache' ); # Modified chomp() (does \r and \n) sub chom { $_[0] =~ s/\r?\n$// } # New Client Connection sub process_request { my $server = shift; $client = $server->{'server'}; $io = new IO::Select \*STDIN; print "\e[2JConnected from $client->{'peeraddr'}\r\n\r\n"; print "[$client->{'peeraddr'}] "; while (1) { return print "\r\n\r\n30 second timeout reached. Goodbye!\r\n\r\n" unless ($io->can_read(30)); chom( my $in = ); if ($in =~ /^(?:cls|clear)$/i) { print "\e[2J"; } elsif ($in =~ /^(?:date|time)$/i) { print "Date/time: \e[33m", scalar localtime, "\e[0m\r\n"; } elsif ($in =~ /^(?:exit|quit|logout)$/i) { return print "You have successfully logged out.\r\n\r\n"; } else { print "Sorry, I don't understand \e[33m$in\e[0m.\r\n"; } print "[$client->{'peeraddr'}] "; } }