client sends data (~1MB) to server through the router
buffer of server runs full and responds a window size value of 0 to the router (at this point the router buffered all data which couldn't been send to the device before the device reported window size value 0. This is about ~ 250k)
router tries to resend with exponentially backoff time but server responses with window size value of 0
server tells router that new space is available by sending an empty package with window size value of 1436 Bytes.
router ignores this message but normally has to continue sending new packages.
@trendy i updated the description. In my opinion the stack of openwrt isn't working as expected because i think the stack gets the package with the information that new buffer is available but didn't response with new data. The stack process/sends new data after the backoff-time expired so i don't think this is a bug in the application (can't be sure)
Alright, I want to see if it is reproduced somehow.
Which arguments do you pass to socat? The client is just uploading the file and the server is just receiving it without any special options?
Have you tried it without socat?
Have you tried a different linux router?
So now i think it is a linux problem. I couldn't find anything valid on the internet but it seems that the stack is dropping these TCP Window Update packages when they have the size of 0 (Len = 0). Unfortunally our embedded device closes the connection after 10 sec inactivity.
Since the same behaviour is noticed in Linux, I think it is expected that OpenWrt will follow.
I don't have any idea, hopefully someone else might be more helpful