>> On Thu, 17 Apr 2008 09:18:31 BST Charles Forsyth <[EMAIL PROTECTED]> wrote:
>>> > having said that, i now suspect that sending one byte into a zero-window
>>> > is
>>> not the problem.
>>>
>>> because the one-byte probe can only be done if there is data to send, and i
>>> already knew that a plain connection (dial only) to that port also failed:
>>
>> Not setting the PSH bit on a pure ACK (== no data is being
>> sent) seems to fix this (see ip/tcp.c around line 2530). May
>> be it tickles a bug on the receiver (0 byte read?).
>
> this does work for me. is there some subtile reason *to* set the psh bit
> on a pure ack? in certain circumstances?
>
> good call. from rfc793, p 42:
>
> [...] If the the user signals a push function then the
> data must be sent even if it is a small segment.
>
> minooka; 9diff ip/tcp.c
> /n/sources/plan9//sys/src/9/ip/tcp.c:2529,2535 - ip/tcp.c:2529,2535
> }
> }
>
> - if(sent+dsize == sndcnt)
> + if(sent+dsize == sndcnt && dsize)
> seg.flags |= PSH;
>
> /* keep track of balance of resent data */
>
> - erik
I noticed this some time ago when I was doing some work in the
stack and thought it was very questionable. But I never got a
chance to go back and do further research. Nevertheless I think
it's the wrong behavior.