Konstantin,

On 10/7/13 10:24 AM, Konstantin Preißer wrote:
>> -----Original Message-----
>> From: Christopher Schultz [mailto:ch...@christopherschultz.net]
>> Sent: Monday, October 7, 2013 3:29 PM
>> To: Tomcat Developers List
>> Subject: Re: 8.0.x / 7.0.x progress
>>
>> Konstantin,
>>
>>
>> Note that it's not Tomcat sending the ACKs, but the TCP/IP stack in the
>> OS running underneath the JVM. I wanted to point that out because it
>> means that Tomcat may be entirely unaware that data exists for reading
>> for some reason. If Tomcat itself were sending the ACKs, it would mean
>> that Tomcat was at least conceptually aware of the data, but refusing to
>> read it for some reason.
> 
> Yes, that's correct. I guess there is some buffering in the various
> layers (TCP/IP stack of OS, Sockets in the JVM etc) so that when sending
> data, the client receive ACKS with a new window size even if the remote
> java code might not be reading the data.

Exactly.

> However, the buffering will not be endlessly so at some point TCP 
> will advertise a window of 0 if the java code does not read from the
> Socket (at least this will be the case with blocking IO - though I do
> not exactly know how the non-blocking IO is implemented so I may as
> well be wrong here). This would mean that Firefox will have to wait
> until there is more window available to continue sending data.

I'm not sure how big the average TCP/IP receive buffer size is. I'd
suspect a few MBs at least. It's bufferbloat at its finest ;)

> In this case, I guess to verify that the remote TCP endpoint is 
> actually reading the data, one would have to send much bigger
> messages to make sure the buffer of the remote endpoint runs out of
> space if it is not reading from the connection. I can try that if I
> have some time left.

Just add a few zeros to your loop limit ;)

-chris

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to