> I try to avoid the low level winsock stuff, but I do know that 
> TIcsBufferHandler is used to store 
> everything before it is sent, each buffer is 1460 bytes (TCP packet size).

> So your application would be allocating 13,700 linked buffer pages before 
> anything was sent, which is
> quite an overhead, and something the unit was never designed to handle.

I assure you a typical system is easily able to handle 13700 buffers each being 
1460 bytes.  I agree that this is often not the most technically correct way to 
handle a problem, yet sometimes it is.  Buffer handling in Ics is fine and 
exactly what is required in some situations.

But anyway, my problem was not due to send() not working on the server side.  
Rather, I determined that the client application was not consistently consuming 
the data it was receiving, thus the socket's receive buffer would fill and not 
accept further data from the server.  I saw this by sniffing the packets and 
seeing the Window parameter from client packets becoming 0 sometimes.

While researching the cause for this misbehaviour, I came across this:
http://support.microsoft.com/kb/192599

Citation: " INFO: Avoid Data Peeking in Winsock".

The article explains that querying the socket for the amount of data in the 
receive buffer in order to later retrieve that data does not work well on 
Windows.  This is just what TWSocket.RcvdCount does, and this is what I was 
using in my client application to consume received data.  After changing this 
to use the result of Receive instead, everything works fine.

I also saw this in OverbyteIcsWSocket.pas:

Nov 26, 2000 V4.25 Do not trust GetRcvdCount. Always call Receive to check for
                   incomming data (sometime NT4 will hang if we don't do that).

It might be good to advertise more strongly against RcvdCount and 
GetRcvdCount... Unless this is something most people already know and I missed 
it?  If so, I apologize for taking your time on this channel.

Cheers,

Raymond



-----Original Message-----
From: TWSocket [mailto:twsocket-boun...@lists.elists.org] On Behalf Of Angus 
Robertson - Magenta Systems Ltd
Sent: July-03-13 11:45 AM
To: twsocket@lists.elists.org
Subject: Re: [twsocket] Problem sending large block of data

> Looking at TWSocket code, I don't see why one could not send 20MB in 
> one chunk


Angus

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

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

Reply via email to