On 10/13/2008 07:46 PM, Rainer Jung wrote:
> Jess Holle wrote:
>> I just set this parameter to 0 and the issue went away entirely.
> 
> And indeed
> 
> http://support.microsoft.com/kb/175523
> 
> confirms, that Microsoft has a different way of handling RST than Unixes.
> 
>> Good catch, Ruediger!  Thank you -- and all who helped on this thread!
> 
> I think it was Mladen ...

Correct and my statement didn't imply to set this registry value to 0. I think
this is a dangerous road and could lead to other network problems.
I wanted to say that the value Mladen mentioned is not really helping as it
"normally" should deal with situations where the SYN packets get lost and
retransmission is due.
But as we all have to learn again Microsoft has their very own interpretation
of RFCs:

RFC793:

"Reset Processing

  In all states except SYN-SENT, all reset (RST) segments are validated
  by checking their SEQ-fields.  A reset is valid if its sequence number
  is in the window.  In the SYN-SENT state (a RST received in response
  to an initial SYN), the RST is acceptable if the ACK field
  acknowledges the SYN.

  The receiver of a RST first validates it, then changes state.  If the
  receiver was in the LISTEN state, it ignores it.  If the receiver was
  in SYN-RECEIVED state and had previously been in the LISTEN state,
  then the receiver returns to the LISTEN state, otherwise the receiver
  aborts the connection and goes to the CLOSED state.  If the receiver
  was in any other state, it aborts the connection and advises the user
  and goes to the CLOSED state."

In particular the last sentence tells us what to do if a SYN is answered
with a RST:

"If the receiver [of the RST packet] was in any other state, it aborts the
connection and advises the user and goes to the CLOSED state."

So if noone finds a registry entry to stop this RFC violating behaviour
I see only two options on Windows:

1. Fiddle around with GetTcpTable.
2. Allow connectiontimeout to somehow accept milliseconds.

A possible idea for 2. would be to decide by the size of the value whether
the value is in seconds or milliseconds:

If the value is < 100 it is seconds, if it is > 100 it is milliseconds.
I guess there is no sense in values < 100 ms and > 99 s for a
*connection* timeout.

Regards

RĂ¼diger

Reply via email to