Re: 1.3.85 and SLIP/PPP Slow (still)

Linus Torvalds (torvalds@cs.helsinki.fi)
Thu, 11 Apr 1996 08:55:31 +0300 (EET DST)


On Wed, 10 Apr 1996, Alan Cox wrote:
>
> > It seems the common problem here is Solaris. Please see my other
> > email about the Solaris bug (it resends packets too soon or
> > something). Do we have to cater for an other OS's bugs?
>
> Afraid so. Paticularly as I suspect the other OS is being confused by
> us breaking the golden rule "Be liberal in what you accept, conservative
> in what you send".

Indeed. Also, Solaris isn't the only problem, although it does seem to be
one of the major ones.

Anyway, here's a pre-patch against 1.3.86 that really does fix the
problem. More of the pre-73 code that sends acks that we really shouldn't
need to send, but as Alan says, "conservative in what you send". Thanks
to people who have tested out things I've tried to make it go away
without this one..

(most of the tcp.c patches are actually purely cosmetic white-space
changes, but the real changes are in there too)

Linus

-----
begin 644 pp87.gz
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
*_1_`9&7>.*P`````
`
end