> The problem was on the receiver side. Inside DataAvailable there
> are onerous instructions for CPU. So winsock messages
> tend to accumulate in Message queue.
> When new packets arrive, the receiver progressively reduce
> TCP sliding window until 0.

That is perfectly correct and expected behaviour. If receiver is not able to
process data quickly enough, sender has to pause sending. TCP window is
there to avoid congestion with not acknowledged data packets while avoiding
slow down because of round trip between sender and receiver. (Sending the
next packet only when previous one has been acknowledged would drastically
reduce thruput. The TCP window allow sender to send packet before having
received ACK, but at most to the size of the TCP window).

Back to the receiver code: with such processing, no winsock message can
accumulate in the message queue. Only a single winsock message is posted in
the queue whatever data is received. And no more message will be posted by
winsock, even if more data comes in, until the application call Receive.
There is not one message per packet, there is one message per call to
receive (plus the initial message of course).

At sender side, as TWSocket automatically buffer data, if you don't use
OnDataSent to know when to send more data and instead simply send everything
you have to send, you'll end up with all data in memory, in TWSocket send
buffer. This means that if you have lots of data to send, send chunk by
chunk (for example 4 or 8KB). Send next chunk when you receive OnDataSent
event. This will produce a continuous flow because you receive OnDataSent
when TWSocket has emptyed his buffer. At that time, winsock still has his
own buffer full and continue to send while you are fetching data from disk
or from elsewhere.

Contribute to the SSL Effort. Visit http://www.overbyte.be/eng/ssl.html
Author of ICS (Internet Component Suite, freeware)
Author of MidWare (Multi-tier framework, freeware)

To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to