On Fri, Feb 20, 2004, Henrik Nordstrom wrote:
> On Fri, 20 Feb 2004, Adrian Chadd wrote:
> 
> > Is there actually a valid reason for squid to even support
> > half-closed connections any more?
> 
> Personally I don't beleive in half-closed connections in HTTP, but some 
> people like to be able to do things like
> 
> (echo "GET http://www.squid-cache.org HTTP/1.0"; echo) | telnet 
> proxyserver 3128

Hm.

> > It just seems like an utter pain in the butt to support correctly..
> > I'm trying to track down a bug in the FTP paths relating to
> > incorrect half-closed handling..
> 
> In what sense does the FTP path care about half-closed? Any actions seen 
> by the FTP module should be independent on if half-closed connections is 
> allowed or not, only the sizes of various race windows should change. 
> Please elaborate.

* i start mirroring something via lftp
* lftp uses Keepalive in its HTTP requests
* I hit ctrl-C in lftp
* a client fd does this:
  - read handler gets called, size 0
  - commMarkHalfClosed() is called
  - ... no more IO is scheduled
  - write handler gets called, sucessful write
  - since Keepalive, the next request is scheduled
  - .. so, a comm_read is issued ..
  - .. which schedules a read ..
  - read returns size 0 since yes, the socket has gone away
  - commMarkHalfClosed() is called
  - but, since the socket is already marked as half-closed, we get an assert and
    it all goes pear shaped

Now, my questions:

* in ConnStateData::readSomeData(), is it ok to just return if the socket
  is marked as half closed? Will a half-closed socket ever be re-opened
  somehow?
* what is the whole point of AbortChecker? As far as I can tell
  AbortChecker::doIOLoop() isn't being called at all. I've modified it
  to actually be called once a second, with no ill effects.

I can post a diff with what I've got thus far. quite a bit of stuff has
been refactored and I don't pray to understand it all.




Adrian

Reply via email to