You're not necessarily wrong, but uIP may not be the best example of a good minimal TCP implementation. I've seen it routinely put the wrong value into the TCP window-size field. This creates an illusion of packet loss, causing senders to retransmit and performance to drop exponentially to zero.
As a workaround, I wrote a custom tool that avoids sending more than one TCP segment at a time:
As a workaround, I wrote a custom tool that avoids sending more than one TCP segment at a time:
https://github.com/dlitz/dlink-firmware-uploader/blob/581b64...