#!/usr/local/bin/perl
#

# original nntps from James.Abendschan@nau.edu


#require 'sys/socket.ph';
use Socket;
require 'flush.pl';

$SIG{'ALRM'} = 'do_alarm';

$serverport = "7";
$connecttimeout = "4";

$myname = "$0";
$hostname = $ARGV[0];
if ($hostname eq "")
{
	print "usage: $myname hostname\n";
	exit 1;
}

init:

# seed & pick a random port number

for ($i=0; $i < $$; $i++) { rand(); }

$clientport = int(rand(32768) + 1024);
$sockaddr = 'S n a4 x8';
$locport=pack($sockaddr, &AF_INET, $clientport, "\0\0\0\0");

if (!socket(C, &PF_INET, &SOCK_STREAM, $proto))
{
	die "ERROR - couldn't create client socket: $!\n";
}

if (!bind(C, $locport))
{
	die("ERROR - cannot bind client socket: $!\n");
}

($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($a,$b,$c,$d) = unpack('C4', $thisaddr);

$ipaddr="$a.$b.$c.$d";

$thatport = pack($sockaddr, &AF_INET, $serverport, $thisaddr);

alarm(0);
alarm($connecttimeout);

if (!connect(C, $thatport))
{
	die "ERROR - connection failed: $!\n";
}

alarm(0);

select(C);
$| = 1;
select(STDOUT);

# Now send/rec data to C
# need to alarm here

alarm(10);
print C "UNIX Here!\n";
alarm(0);
$ret = <C>;
print "$ret";
flush(STDOUT);


closeup:

alarm(0);
shutdown (C, 1);
close(C);

exit(0);

#
# Handle timeouts
#

sub do_alarm
{
	alarm(0); # reset alarm clock
	$SIG{'ALRM'} = 'do_alarm';
	print "timeout (host died?)\n";
	shutdown (C, 1);
	close(C);
	exit(1);
}



