>> 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.


Reply via email to