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 $$`;

Reply via email to