test1.pl: use IO::Socket::INET; my $socket = new IO::Socket::INET(Proto => "udp", LocalAddr => "localhost", LocalPort => 3000, PeerAddr => "localhost", PeerPort => 3001, Timeout => 10) || die "failed"; while (1) { my $msg = <$socket>; chomp $msg; print "got $msg\n"; print $socket $msg + 1, "\n"; } test2.pl: use IO::Socket::INET; my $socket = new IO::Socket::INET(Proto => "udp", LocalAddr => "localhost", LocalPort => 3001, PeerAddr => "localhost", PeerPort => 3000, Timeout => 10) || die "failed"; print $socket "1\n"; while (1) { my $msg = <$socket>; chomp $msg; print "got $msg\n"; print $socket $msg + 1, "\n"; }