use IO::Socket::INET; use IO::Select; use strict; use warnings; my @sockets; my $packet_rcvd; for (4000 .. 4200) { my $socket = new IO::Socket::INET(Proto => "udp", LocalPort => $_, LocalAddr => "localhost") || die "failed to establish socket for port $_"; print "udp socket created for port $_\n"; push @sockets, $socket; } print "all socket created\n"; for my $socket (@sockets) { my $select = new IO::Select($socket);#now select is only for one socket, obviously less than 64 my @readable; do { @readable = $select->can_read(1); } until ($#readable != -1); my $peer = $socket->recv($packet_rcvd, 50); print "packet $packet_rcvd recvd at port " . $socket->sockport() . "\n"; }