Regarding TIME_WAIT, you got me there, I didn't actually suspect they might be closed and timing out, is this normal behaviour? Are there any ways for me to report number of sockets being kept open within perl?
This problem report came to me from a sysadmin complaining to me that when my script runs, there's tons of sockets everywhere and other processes are acting strangely, like an ftp server being intermittently unresponsive .
| [reply] |
Regarding TIME_WAIT, you got me there, I didn't actually suspect they might be closed and timing out, is this normal behaviour?
Yes. A TCP port is marked as unavailable (TIME_WAIT) for an amount of time after being closed to avoid having a delayed packet from one connection affect a later connection on the same port. This can be disabled on a per-socket basis (at least).
Are there any ways for me to report number of sockets being kept open within perl?
I sure there is, but I don't know what tools are available.
On some systems, you could peek into /proc/$$/fd/ ($$ representing the process's PID). You'll see open file handles, which includes open sockets.
$ perl -MIO::Socket::INET -E'
system "ls -lF /proc/$$/fd/";
my $s = IO::Socket::INET->new("www.google.com:80") or die $!;
system "ls -lF /proc/$$/fd/";
'
total 0
lrwx------ 1 eric users 64 Feb 14 15:22 0 -> /dev/pts/7
lrwx------ 1 eric users 64 Feb 14 15:22 1 -> /dev/pts/7
lrwx------ 1 eric users 64 Feb 14 15:22 2 -> /dev/pts/7
lr-x------ 1 eric users 64 Feb 14 15:22 3 -> pipe:[2358130]
total 0
lrwx------ 1 eric users 64 Feb 14 15:22 0 -> /dev/pts/7
lrwx------ 1 eric users 64 Feb 14 15:22 1 -> /dev/pts/7
lrwx------ 1 eric users 64 Feb 14 15:22 2 -> /dev/pts/7
lr-x------ 1 eric users 64 Feb 14 15:22 3 -> socket:[2358143]
lr-x------ 1 eric users 64 Feb 14 15:22 4 -> pipe:[2358144]
(0,1,2 = std*. The pipe is used by system to communicate exec failures to the parent.)
Update: netstat on my machine has a -p option that shows the PID of the process that owns the socket. | [reply] [d/l] [select] |