[ros-dev] Loopback problem
Ge van Geldorp
gvg at reactos.org
Wed Dec 21 19:30:52 CET 2005
> From: Murphy, Ged (Bolton)
> This is true. Although Send() will return indicating the data
> has been sent, nagling should hold the actual packet back
> until it is full, however this should only happen if there is
> unconfirmed data i.e. no ACK.
Ok, so it seems that the sending side is correct in holding back the packet.
In ReactOS the problem then is that the ACK is delayed for too long. I've
checked the delayed ACK path. Basically we fire a timer every 0.5 sec to do
cleanup tasks. Only one of every 5 of these timer ticks is passed on to the
oskittcp lib (routine TCPTimeout only calls TimerOskitTCP on every 5th
tick). This means that the oskittcp routine tcp_fasttimo() which is
responsible for sending delayed ACKs is only called every 2.5 sec, which
corresponds exactly to the delays in the loop.c test program I posted
So, the solution seems to be to call tcp_fasttimo() more often. Question is
how often? There's a comment in the accompanying tcp_slowtimo() that it
should be called every 500ms. So I guess tcp_fasttimo() should be called
substantially more often than that?
> To avoid any confusion, you can switch nagling off with the
> TCP_NODELAY flag
Haven't checked yet if we implement this.
> I'm interested in this bug, but I'm not around tonight to
> play about with it :(
I promise not to fix it tonight ;)
More information about the Ros-dev