Robert Collins wrote:
> On Sat, 2008-11-01 at 10:45 -0600, Alex Rousskov wrote:
>> Moreover, if we must read until EOF before we close, then the cleanup
>> code would have to be rewritten in many places, not just the deferred
>> read-related ones!
>
> src/comm.cc line 353:
> /**
> * Empty the read buffers
> *
> * This is a magical routine that empties the read buffers.
> * Under some platforms (Linux) if a buffer has data in it before
> * you call close(), the socket will hang and take quite a while
> * to timeout.
> */
> static void
> comm_empty_os_read_buffers(int fd)
> {
> #ifdef _SQUID_LINUX_
> /* prevent those nasty RST packets */
> char buf[SQUID_TCP_SO_RCVBUF];
>
> if (fd_table[fd].flags.nonblocking == 1) {
> while (FD_READ_METHOD(fd, buf, SQUID_TCP_SO_RCVBUF) > 0) {};
> }
> #endif
> }
>
Aha, thanks Robert that was it exactly.
Two seconds more thought and this API seems to be what the destructor
should be doing instead of kicking off its own internal read.
Amos
-- Please be using Current Stable Squid 2.7.STABLE5 or 3.0.STABLE10 Current Beta Squid 3.1.0.1Received on Sun Nov 02 2008 - 00:46:43 MDT
This archive was generated by hypermail 2.2.0 : Mon Nov 03 2008 - 12:00:04 MST