#!/usr/bin/perl -w
# vim: set sw=4 ts=4 si et:
# Simple single threaded web server, written by Guido Socher
# copyright: freeware, do with it whatever you want. No warranty of any kind.
#
# Usage: perlweb.pl [portnumber] [ip-to-bind-to]
# Example: ./perlweb.pl
# The above example will answer http requests at port 8000 
# on any interface that this machine has.
# Try:
# curl -v http://localhost:8000
#
use strict;
use Socket;
#
my $listenport = $ARGV[0] || 8000;
socket (Server, PF_INET, SOCK_STREAM, 6) || die ("Error socket: $!"); # protocol 6 is tcp
setsockopt(Server, SOL_SOCKET,SO_REUSEADDR,1) || die ("Error setsockopt: $!");
my $sockaddr = sockaddr_in($listenport, $ARGV[1] ? inet_aton($ARGV[1]) : INADDR_ANY) || die ("Error sockaddr_in: $!");
bind(Server,$sockaddr) || die ("Error bind: $!");
listen(Server,SOMAXCONN) || die ("Error listen: $!");

my $caddr;
my $buffer;
while ($caddr = accept(Client, Server)) {
    recv(Client,$buffer,1000,0);
    if ($buffer && $buffer=~/^GET /){
        print Client "HTTP/1.1 200 OK\r\n";
        print Client "Content-Type: text/html\r\n";
        print Client "Server: perlweb/1.0\r\n";
        print Client "Connection: close\r\n";
        print Client "\r\n";
        # debug a bit:
        #print "client:\n$buffer\n";
        print Client "<h1>This web server works!</h1>\n";
    }
    close Client;
}
#
__END__