Hello,
This is not a Keil related question (even though the Keil compiler is used to build the code). Sorry for that, I was merely wondering if someone had a clue...! I have a rather strange problem: using open source networking library lwIP running of a LPC1788/FreeRTOS (does not matter I think), I am attempt to upload large files to a server. If a browser is used for that purpose (mimicking the embedded product behavior), the data is deliver quickly. However, if lwIP is used, I see that the reception window of the server shrinks and shrinks until it is so small that the connection is stalled and then broken. I do see that the browser uses TCP scaling (en.wikipedia.org/.../TCP_window_scale_option) but I don't think this is the main reason: even sending 5 KB/s induces this behavior! I know that server is powerful enough. I know lwIP is fast enough. I don't understand why the reception window of the server shrinks when lwIP sends data, but not if a browser sends data. Any ideas?
Shrinking reception window probably indicates that the server is not acknowledging received data. It's probably a bug in the server. You should inspect it with an in-circuit debugger. If that's problematic, try looking at the differences between the data sent by the browser and the embedded client.
How can this be a bug in the server if the same upload process, when carried out by a browser, does not cause this behavior? I need to slow down the upload to something like 3 KB/s to prevent this from happening, which is on the average even slower than uIP that lwIP is intended to replace...
Well, it sure looks like what you suggest, Mike:
en.wikipedia.org/.../Silly_window_syndrome
but there is conflicting evidence...
How can this be a bug in the server if the same upload process, when carried out by a browser, does not cause this behavior?
It escapes me how the fact that everything works with a browser suddenly rules out any possible bug in the server. The server likely needs debugging. Some knowledge of how lwip works is necessary for that.
There must be a difference between the two situations.
Using something like Wireshark and looking at the actual traffic would be a very good start.
DJR