my $readsocks = IO::Select->new($new_client); my $writesocks = IO::Select->new(); while (($readers, $writers) = IO::Select->select($readsocks,$writesocks)) { foreach my $sock (@$readers) { # Read from a socket... # Perhaps add this socket to $writesocks. } foreach my $sock (@$writers) { # Write to a socket. } }