use IO::Select; my $sel; foreach $server (keys(%{$servers})) { if ($socket = IO::Socket::INET->new(PeerAddr => $server, PeerPort => 3331, Proto => "tcp", Type => SOCK_STREAM, Timeout => 3500) ) { $sel = new IO::Socket($socket); print "tcp write timeout" && next if !$sel->can_write(1); print $socket "test\n"; print "tcp read timeout" && next if !$sel->can_read(2); $server_state = <$socket>; $socket->close(); chomp($server_state); if ($server_state <= ($servers->{$server}->{max_jobs} + 3) ) { push(@good_servers, $server); } else { print "$server returned $server_state...\n"; } } } this is giving me: IO::Socket: Cannot configure a generic socket at ./xxxxxxx line 1407 any ideas why? $server is valid host address.