Use IO::Select $select = IO::Select->new(); $select->add($socket1); $select->add($socket2); $select->add($socket3); $select->add($socket4); @ok_to_read = $select->can_read($timeout); foreach $socket (@ok_to_read) { $socket->recv($data_buffer, $flags) print $data_buffer; }