Since the embedded device takes time to write the data to flash, I've
implemented a handshaking algorithm. The application sends one packet
at a time and waits for a response from the embedded device before
sending the next packet.
The application is written in C# and can be compiled to run on Linux
2.6 kernel, Windows 2003, Windows XP and Windows Vista.
I find that when I run the application on Windows 2003 or Windows XP
the transfer is 100X slower than when I run it on Windows Vista or
Linux. At first I suspected a Nagle effect but the problem persisted
even after I set TCP_NOWAIT option.
After seeing a post (http://groups.google.com/group/comp.os.ms-
windows.networking.tcp-ip/browse_thread/thread/
354446913d626270/229dca3ed9170da1?lnk=gst&q=Nagle
+2003%23229dca3ed9170da1) describing the effect of the PUSH flag, I'm
inclined to believe that the 500ms delay I see between packets at the
sender is due to the fact that the embedded device does not set the
PUSH flag in any communication.
Can anybody tell me why Vista and Linux would treat the PUSH flag
differently from XP or 2003? Is there any way to force XP/2003 to
ignore the PUSH flag and process the packet immediately using socket
options?
Sincerely
Arya