On Wed, May 03, 2017 at 02:22:23PM +0100, Stuart Henderson wrote: > On 2017/05/03 10:33, Stuart Henderson wrote: > > $ fstat | grep internet.stream.tcp | head -1500 |tail -5 > > _tomcat java 88950 1585* internet stream tcp 0x0 *:0
The socket has no TCP PCB anymore. This can happen either after a TCP reset packet or a shutdown and a TCP time wait timeout. The attached Perl script triggers both cases. I consider it as a bug that these connection don't appear in netstat. bluhm #!/usr/bin/perl # create stream sockets without tcp pcb use strict; use warnings; use IO::Socket::INET; use Socket; $> == 0 or die "Must run as root for netstat and fstat pointers"; my $ls = IO::Socket::INET->new( Domain => AF_INET, LocalAddr => "127.0.0.1", Proto => "tcp", Listen => 1, ) or die "Create listen socket failed: $!"; my $port = $ls->sockport(); # connect and reset my $cs = IO::Socket::INET->new( Domain => AF_INET, PeerAddr => "127.0.0.1", PeerPort => $port, Proto => "tcp", ) or die "Create connect socket failed: $!"; my $as = $ls->accept() or die "Accept socket failed: $!"; $cs->setsockopt(SOL_SOCKET, SO_LINGER, pack('ii', 1, 0)) or die "Linger connect socket failed: $!"; $cs->close() or die "Close connect socket failed: $!"; sleep 1; print "\nReset:\n"; print map { " $_" } `netstat -Aan -f inet -p tcp`; print map { " $_" } grep { /internet stream tcp/ } `fstat -p $$`; # connect and shutdown $cs = IO::Socket::INET->new( Domain => AF_INET, PeerAddr => "127.0.0.1", PeerPort => $port, Proto => "tcp", ) or die "Create connect socket failed: $!"; $as = $ls->accept() or die "Accept socket failed: $!"; $as->shutdown(SHUT_WR) or die "Shutdown accept socket failed: $!"; $cs->close() or die "Close connect socket failed: $!"; # TIME WAIT Timeout=2MSL + 1 sleep 61; print "\nShutdown:\n"; print map { " $_" } `netstat -Aan -f inet -p tcp`; print map { " $_" } grep { /internet stream tcp/ } `fstat -p $$`;