I am using Keil's RL-TCPnet for network communications. The controller (STM32F107) is supposed to send up to 10 consecutive tcp messages every 10 ms. I am calling timer_poll() and main_TcpNet every cycle (every 10 ms), system timer is 100 ms. When I am sending consecutive messages, only the first one goes through. I tried to insert
while (tcp_check_send(socket_tcp) != __TRUE) {;}
before each message. In this case the controller just hangs there.
What can I do to send all the messages in succession? Any suggestions are highly appreciated.
Gennady
The Delayed ACK that windows is using is based off of RFC 2581. Here is a good description of this RFC:
"The delayed ACK algorithm is also a method for congestion control (RFC 2581), so the receiver won't flood the network with ACK packets. When the receiver has to sent an ACK in response to a packet, then it waits a little (200 ms or until it has 2 outstanding ACKs) to see if more packets should arrive that it can acknowledge with that single ACK."
From smallvoid.com/.../winnt-nagle-algorithm.html
So since we send 2 packets - one big, one small - this creates a 2 outstanding ACK scenario, and windows will respond to both packets.
Since these devices will not be able to attain full 100 MB/s speeds anyways, the Delayed ACK does not help.