[130] in linux-net channel archive
Possible Bug in tcp.c
daemon@ATHENA.MIT.EDU (Mike McCabe)
Wed Mar 15 14:57:10 1995
From: Mike McCabe <mccabe@nscgld.com>
To: linux-net@vger.rutgers.edu
Date: Wed, 15 Mar 1995 11:58:48 -0500 (EST)
Hi Everybody...
I think we have found a possible bug in the code for tcp. In the file
/usr/src/linux/net/inet/tcp.c in the routine tcp_data there is a line
that reads.
if ( skb->len == 0 && !th->fin && !th->urg && !th->psh )
and then inside this if statement is a check to see if the message was
an ack. If it was then it does not send it because tcp_ack() already did.
The problem we have run into is with a machine that uses MSDOS and a netbios
to tcp/ip driver from Wollogong. This system has a very small buffer for
packets (on the order of 190 bytes). It also pushes every ack it sends.
But since it pushes the ack both tcp_ack and tcp_data send an ack and the
two systems get into an ack war. By removing the !th->psh from this if
statement our problem was solved.
A question is however, is this fix messing with the tcp standard or is this
a bug in the Linux tcp driver? The problem only occurred when the MSDOS
machine shrunk its window to zero.
Mike McCabe
National Steel - Great Lakes Division
mccabe@nscgld.com