#!/usr/bin/perl
# simple server

$PORT=17100; # listen for requests on this port (http://host:12345/index.html)
$AF_INET=2;
$TCP=(getprotobyname('tcp'))[2];
$SOCK_ADDR=pack('S n a4 x8', $AF_INET, $PORT, "\0\0\0\0");
$SOCK_STREAM = 1 if socket(S, $AF_INET, 1, $TCP);
$SOCK_STREAM = 2 if socket(S, $AF_INET, 2, $TCP); # Solaris
close S;

if ($PORT =~ /\D/) { # port name instead of a number?
	$PORT=(getservbyport($PORT, 'tcp'))[2];
}

socket(S, $AF_INET, $SOCK_STREAM, $TCP) || die "$SERV_NAME socket: $!\n";
bind(S,$SOCK_ADDR) || die "$SERV_NAME bind: $!\n";
listen(S,5) || die "$SERV_NAME listen: $!\n";

local($WAS)=select(S);
$| = 1;
select(NS);
$| = 1;
select($WAS);

print "\n--- Simple Server 1.0\n--- Listening for requests on port $PORT\n";
while (1) {
	++$conn;
	($addr = accept(NS,S)) || die "$SERV_NAME accept: $!\n";
	($af,$port,$ipaddr) = unpack('S n a4 x8',$addr);
	$ipaddr = join('.', unpack("C4",$ipaddr));
	print "--- Connect: #$conn $ipaddr:$port ", scalar(localtime), "\n";
	while (<NS>) {
		print $_;
	}
	print "--- Disconnect: #$conn $ipaddr:$port ", scalar(localtime), "\n";
	close(NS);
}
