TCP windowfull condition

I am using a WIZ820io modules in one of my projects. I’ve written code to replicate the example W5200 driver and socket layer code.

I’ve also written a PC client app which receives data using a TCP socket. I’m sending ~ 2kB data every 10 ms, so sending ~ 200 kB/s. Doesn’t seem like that should be a challenge.

In general, the app is working most of the time. However, periodically, the send() function doesn’t send all the data at once, and goes into the retry part (referring to the example TCP send).

It seems like if it ever goes into this part, it can never send all the bytes, and I get the windowfull no matter what. I’ve matched my code closely to the example code. I can’t see any apparent differences. But, when I set a break in the retry part, it never succeeds. Not sure what to look for?


I recommend the method of using the No delay Ack.
As far as I know, If you only use send operation, W5500 don’t transmit the data until timeout operation occur.
If you set up the Sn_MR(No delay Ack bit enable),you can see faster speed than previous.

And how do you transmit 2Kbyte at once? As far as I know, TCP segments maxsize is 1460byte.

thanks, :slight_smile:

I think you have a problem in tcp retransmittion.

Using wireshark progam(it’s free), You can capture retansmittion packet.
Wireshark help us to analyse the problem.

Please, Capture the packet and Post it.