Wierd networking.

Julian Elischer julian at elischer.org
Thu Jul 19 16:32:58 UTC 2007


Julian Elischer wrote:
> Eygene Ryabinkin wrote:
>> Julian, good day.
>>
>> Wed, Jul 18, 2007 at 12:12:15PM -0700, Julian Elischer wrote:
>>>> Seems like it is the effect of the SS_NOFDREF check in the
>>>> netinet/tcp_input.c, at least it is present in the rev. 1.281.2.5.
>>>>
>>>> See the post
>>>>    
>>>> http://lists.freebsd.org/pipermail/freebsd-current/2007-July/074837.html 
>>>>
>>>>  
>>> That makes perfect sense..
>>> thankyou.
>>
>> You're welcome ;)))
>>
>>> I will check this avenue of inquiry. possibly we should do a shutdown()
>>> and let the file descriptor exist for a few seconds.
>>
>> Yes, it is a way to do it.  And we may even calculate the amount
>> of time: as I understand, the time estimate is roughly equal to the
>> (TCP window)/(connection bandwidth).  The BW is not determined well,
>> but we can try to extract this from the time interval between two
>> successive packets that came from the remote side and the size of
>> these packets.
> 
> 
> In the code in question I found that there already existed code to do 
> this exactly, except it was only enabled under __LINUX__.
> it has an event loop, and it continues to keep the file descriptor in 
> the read-interest set until it starts to return EOF, indicating that the 
> other end has also done the close. (or the socket has timed out of
> FIN_WAIT_1). I have simply enabled it for FreeBSD OR linux ;-)

replying to myself.. the comment in the code in  question said:

/*-----------------------------------------------------------------*/
> /** if the elaborateTCPFin option is set, keeps the socket open
>  * and drains it until the other side closes it.  Solves a problem
>  * with IE spewing extra client data to a Linux socket, then reporting
>  * an error in response a TCP reset (rather than FIN) from Linux */

which is EXACTLY the problem I was seeing :-)

> 
> 
>>
>>> From the other hand, we may not want to have the per-connection
>> estimate and set it to some small amount of MSLs.
>>
>> Another way to deal with the problem is not to send the FIN's after
>> the one provoked by the closed descriptor.  As I understand, the
>> SS_NOFDREF check is a optimization to avoid processing unneeded
>> data in the TCP stack.  So we may just silently blackhole the
>> successive packets, at least some of them.
> 
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"



More information about the freebsd-net mailing list