Mine is a little different
use strict; use warnings;
select (STDOUT); $| = 1; select(STDOUT);
# http://127.0.0.1/exit
# http://127.0.0.1/hi
# http://127.0.0.1/null
# http://127.0.0.1/unknown
use IO::Handle;
use IO::Socket;
use IO::Select;
my $server = IO::Socket::INET->new( Proto => 'tcp',
PeerAddr => "127.0.0.1", # only
+ us
LocalPort => 80,
Listen => SOMAXCONN,
Reuse => 1);
die "can't setup server on 80" unless $server;
my $sel_read = IO::Select->new();
my $sel_write = IO::Select->new();
my $sel_error = IO::Select->new();
$sel_read-> add($server);
my $cmdrun={};
$cmdrun->{'/exit'} =sub{exit;} ;
$cmdrun->{'/hi'} =sub{my $fh=shift; print $fh "\nhi\n";} ;
$cmdrun->{'/null'} =sub{} ;
while(1) {
checkforrequests();
} # superloop
exit;
sub checkforrequests {
my $timeout=1;
my ($rd_ptr,$wr_ptr,$er_ptr)=IO::Select->select($sel_read,undef,$s
+el_error,$timeout);
for my $fh (@$rd_ptr) {
if ($fh == $server) {
my $client = $server->accept;
$client->autoflush(1);
$sel_read->add($client);
} # server
else {
my $line=<$fh>;
print "line:$line";
my ($junk,$post)=split(' ',$line,3);
my $cmd=$cmdrun->{$post};
if ($cmd) {&$cmd($fh);}
else { print $fh "\n\nNO\n"; }
$sel_read->remove($fh);
close $fh;
} # client
} # for fh
} # checkforrequests