Sockets, UDP mirror

The server code is started in hasWhatever.desy.de.

#!/usr/bin/perl -w
use strict;
use IO::Socket;

my $maxlen = 1024;
my $portno = 7777;
my $msg = " " x $maxlen;

my $sock = IO::Socket::INET->new( LocalPort => $portno, 
                                  Proto => 'udp') or die "socket: $@";
       
print "receiving on port $portno\n";

while ($sock->recv($msg, $maxlen)) {
    my($port, $ipaddr) = sockaddr_in($sock->peername);
    my $remoteHost = gethostbyaddr($ipaddr, AF_INET);
    print "received $msg from $remoteHost, $port\n";
    $sock->send("CONFIRMED: $msg ");
} 
die "recv: $!";

The client code:

#!/usr/bin/perl -w

use IO::Socket;
use strict;

my $maxlen  = 1024;
my $port  = 7777;
my $tmo = 5;

my $sock = IO::Socket::INET->new(Proto     => 'udp',
                              PeerPort  => $port,
                              PeerAddr  => 'hasWhatever.desy.de')
    or die "failed to create server: $!\n";

my $msg = 'hello server';

$sock->send($msg) or die "send: $!";

eval {
    local $SIG{ALRM} = sub { die "receive failed" };
    alarm $tmo;
    $sock->recv($msg, $maxlen)      or die "recv: $!";
    alarm 0;
    1;  # return value from eval on normalcy
} or die "recv from localhost timed out \n";

print "Server replied $msg\n";