Contents of file "jcimrecv"
#!/usr/pkg/bin/perl
use Socket;
$udp = getprotobyname('udp');
# place in /etc/services:
# jcim 25450/udp # John Comeau's instant messenger
$port = getservbyname('jcim', 'udp') || die "Undefined port JCIM\n";
socket(Socket_Handle, PF_INET, SOCK_DGRAM, $udp) || die "No socket: $!\n";
$addr = $ARGV[0] || "0.0.0.0";
$sockaddr = sockaddr_in($port, (gethostbyname($addr))[4]);
bind(Socket_Handle, $sockaddr) || die "Cannot bind: $!\n";
print STDERR "Hit Control-C to stop listening\n";
while(1) { # loop forever until ^C
$src = recv(Socket_Handle, $message, 1024, 0);
$src = join('.', unpack('C4', $src)); # render address readable
if ((substr($message, 0, 1)) eq "\0") {
print "$0[$$]: skipping data\n";
} else {
# get rid of control codes which may be dangerous
# also change multiple whitespaces to single space
$message =~ tr/\x20-\x7f\xa0-0xff/ /cs;
print "$message\n";
}
}