Some more code:
socket (my $sock, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die
+"socket: $!";
if(fcntl ($sock, F_SETFL, O_NONBLOCK)){
my $iaddr = inet_aton(${$sock}->{host}) or return;
my $paddr = sockaddr_in( ${$sock}->{port}, $iaddr ) or return;
setsockopt($sock, SOL_SOCKET, SO_SNDTIMEO, pack("QQ", ${$sock}->{t
+imeout}, 0)) or die "setsockopt SOL_SOCKET, SO_SNDTIMEO: $!\n";
setsockopt($sock, SOL_SOCKET, SO_RCVTIMEO, pack("QQ", ${$sock}->{t
+imeout}, 0)) or die "setsockopt SOL_SOCKET, SO_RCVTIMEO: $!\n";
setsockopt($sock, 6, 18, pack("QQ", 5, 0)) or die "setsockopt SOL_
+TCP, TCP USER TIMEOUT: $!\n";