sub RunServer { my $connectno = 0; while (1) { my $daemon; my $port = $Admin{port}; until ( $daemon = HTTP::Daemon->new( LocalAddr => "", LocalPort => $port, Listen => 5 ) ) {sleep 2} my $readable = IO::Select->new; $readable->add($daemon); print "Listening...\n"; while (1) { while (IO::Select->select($readable, undef, undef, 0)) { my $connex = $daemon->accept; threads->create(\&Handler, $connex, ++$connectno)->detach } last if $port != $Admin{port}; sleep .1 } } } sub Handler { my ($connex, $connectno) = @_; my $peeraddr = $connex->peeraddr; $peeraddr = join('.', unpack('C4', $peeraddr)); print "Connection $connectno at " . localtime(time) . " from $peeraddr\n"; while (my $req = $connex->get_request) { my $req_uri = $req->uri; my $req_content = $req->content; my $req_method = $req->method; print " Connection: $connectno Request: $req_method $req_content $req_uri\n"; if ($req_method eq 'POST') { DoPost($connex, $peeraddr, $req_content, $req_uri) } elsif ($req_method eq 'GET') { DoGet($connex, $peeraddr, $req_uri) } else { SendNotFound($connex) } } print "Connection $connectno finished.\n"; sleep 1 while ($connex->connected); $connex->close; print "Connection $connectno closed.\n\n"; } #### sleep 1 while ($connex->connected);