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

=pod
socket UDP, PF_INET, SOCK_DGRAM, getprotobyname('udp') or die 'socket';
bind UDP, sockaddr_in(620, INADDR_ANY) or die 'bind';
while (1) {
	my $data = '';
	recv UDP, $data, 1024, 0 or die 'error';
	print $data;
}
=cut

my $port = $ARGV[0] || 6201;

print $port, "\n";

use IO::Socket;
use Fcntl;
my $sock = IO::Socket::INET->new(Proto => 'udp', LocalPort=>$port);

nonblock($sock);

$rin = '';
vec($rin,$sock->fileno,1) = 1;

while (1) {
	($nfound,$timeleft) =
	  select($rout=$rin, undef, undef, undef);

	sleep 1;

	my $data = '';

	$sock->recv($data, 1024, 0) or die "error $!";
	print $data;
}

sub nonblock {

	my $socket = shift;
	my $flags;

	$flags = fcntl($socket, F_GETFL, 0)
			|| die "Can't get flags";
	fcntl($socket, F_SETFL, $flags | O_NONBLOCK)
			|| die "Can't set flags";

}
