On 20/04/2012 8:27 p.m., Jean-Philippe Menil wrote:
Hi,

like disussed earlier on the squid-users mailing list
(http://www.squid-cache.org/mail-archive/squid-users/201204/0280.html);
i experiment problem due to read_timeout not reset correctly in tunnel.cc.

Example:
when i download a file on https site, the download stop on the read_timeout value.
It can be esealy repeat:

read_timeout 30 seconds
(the defautl is 15 minutes, but it fail too)

wget --no-check-certificate
https://nzdis.org/projects/projects/perfnet/repository/revisions/4/raw/vendor/Vyatta/Vyatta/vyatta-livecd-vc5.0.2.iso
-O /dev/null

With the following (obvious) patch, i can't repeat the problem:

01-build64:/home/menil-jp/squid-3.2.0.17# diff src/tunnel.cc /tmp/squid-3.2.0.17/src/tunnel.cc
321,326d320
< if (Comm::IsConnOpen(to.conn)) {
< AsyncCall::Pointer timeoutCall = commCbCall(5, 4, "tunnelTimeout",
< CommTimeoutCbPtrFun(tunnelTimeout, this));
< commSetConnTimeout(to.conn, Config.Timeout.read, timeoutCall);
< }
<
333,336c327,330
< /* Only close the remote end if we've finished queueing data to it */
< if (from.len == 0 && Comm::IsConnOpen(to.conn) ) {
< to.conn->close();
< }

Please, can anyone confirm this problem?

Sorry, finally found some spare time.
If I'm reading that function right this timeout is occuring on CONNECT where the traffic flow is all one-way for the duration of the timeout right?

ie, tunnel gets setup. Request bytes sent down it from client->server, then server sends response data for >N seconds with not one more byte from client->server. N being the timeout value.

Which would make the timeout correct. Read has not occured on the client connection for N seconds. But not suitable for two-way CONNECT tunnel.


The proper solution would probably be to bump read timeout when data is successfully written to the connection (writeClientDone/writeServerDone). So we did not keep bumping read timout on a aborted connection.


Any other opinions?


Amos

Reply via email to