Problem with closing tcp session between cisco and freebsd

Crist J. Clark cristjc at comcast.net
Tue Mar 16 23:40:00 PST 2004


On Wed, Mar 17, 2004 at 10:14:53AM +0300, Zherdev Anatoly wrote:
> On Tue, 16 Mar 2004 16:06:11 -0800
> "Crist J. Clark" <cristjc at comcast.net> wrote:
> 
> 
> [Skip...]
>                                                                   ^
> > The zero window-size tells me the TCP buffer on the FreeBSD side is
> > full. The Cisco is trying to send that last byte of data and the FIN,
> > but the FreeBSD side cannot accept it since the buffer is full. This
> > usually means the application on the FreeBSD side is not reading the
> > data out of the socket.
> > 
> > What's the 'netstat -an' for this connection on the FreeBSD side?
> 
> There is netstat -an for this session
> 
> tcp4   57352      0  FREEBSD.513        CISCO.990       ESTABLISHED
         ^^^^^
This is the Recv-Q. That value wouldn't happen to coincide with
the value of,

  $ sysctl net.inet.tcp.recvspace

But it looks like my guess is probably correct. The receive buffer at
the FreeBSD end is full. When it receives more TCP data, it cannot
accept it so it ACKs up to whatever it has in the buffer and not what
the sender sent in the last segment. It also sends a window size of
zero to tell the sender it's not accepting more data at the moment.

You need to flush the buffer at the FreeBSD end. The program receiving
on that socket needs to read the data. If the process is frozen, kill
it and things should clear up.
-- 
Crist J. Clark                     |     cjclark at alum.mit.edu
                                   |     cjclark at jhu.edu
http://people.freebsd.org/~cjc/    |     cjc at freebsd.org


More information about the freebsd-net mailing list