It appears that some network stacks (Win32's, it appears) can fail to properly close a connection when the socket is closed (such as when the process exits). Calling shutdown then close is the most sure way to fully and properly close the socket.
You could try adding the following to your script so that an orderly exit will explicitly close any sockets, including calling shutdown:
use Socket; sub IO::Socket::DESTROY { my $sock= shift @_; return if ! defined fileno $sock; my $peerAddr= getpeername( $sock ); my( $port, $ip )= sockaddr_in( $peerAddr ); my $host= gethostbyaddr( $ip, AF_INET() ); $ip= inet_ntoa( $ip ); $ip= "$host($ip)" if $host; warn "Shutting down socket to $ip:$port...\n"; shutdown( $sock, 2 ); close( $sock ); }
which I tested against a simplified version of your script fragment.
- tye
In reply to Re: Closing the connection (shutdown)
by tye
in thread Closing the connection
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |