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";
 }
}