#!/afs/athena/contrib/perl/perl

require 'sys/socket.ph';

$af_inet     = &AF_INET;
$pf_inet     = &PF_INET;
$sock_stream = &SOCK_STREAM;
$proto       = getprotobyname('tcp');

socket(SOCK, $pf_inet, $sock_stream, $proto)
  || die "socket($pf_inet, $sock_stream, $proto): $!";
printf "%3d = socket(%d, %d, %d)\n", fileno(SOCK),
  $pf_inet, $sock_stream, $proto;

$address = shift || 'infocalypse.mit.edu';
$port    = shift || 17;

if ($address =~ /[^\d\.]/) {
  $packed_addr = (gethostbyname($address))[4]
    || die "gethostbyname($address): $!";
  $address = join(".", unpack("C4", $packed_addr));
} else {
  $packed_addr = pack("C4", split(/\./, $address));
}

$remote_addr = pack('S S a4 x8', $af_inet, $port, $packed_addr);
connect(SOCK, $remote_addr)
  || die "connect(SOCK, {$af_inet, $port, $address}): $!";
printf "%3s   connect(SOCK, {%d, %d, %s})\n", '', $af_inet, $port, $address;

while (<SOCK>) {
  print $_;
}
