[Zope-dev] Zope closes connection if the client closes the write-end of connection

Tres Seaver tseaver at palladion.com
Fri Oct 16 12:35:27 EDT 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Izak Burger wrote:
> Tres Seaver wrote:
>> You might also look at "fixing" varnish:  I don't know of any valid
>> reason for it to be using the "half-open" connection model to test that
>> an HTTP-based backend is "up" -- certainly no browser in the world does
>> that;  instead, modern browsers nearly always try to keep the connection
>> open for subsequent requests.
> 
> I have already "fixed" varnish, I commented out the shutdown() call. It 
> now works as expected.
> 
> I just had a discussion about this with a colleague and it appears 
> unclear exactly where to blame this.
> 
> When a client half-closes its connection while the server was calling 
> recv(), it makes absolute sense that recv() SHOULD return an empty 
> buffer. There is nothing to return, and there won't ever be, the 
> connection has been closed. Python is therefore not to blame, even if it 
> doesn't specifically check all the possible revents returned by poll().
> 
> When asyncore receives an empty result from recv(), it does correctly 
> assume that the connection was shut down. It doesn't seem wrong for 
> asyncore to let the upper layers know about this. It would seem that 
> asyncore is not to blame either.
> 
> When asyncore calls the close() method inside zope, it ends up shuting 
> down the whole thing. Though I could argue that zope shouldn't be doing 
> this, the idea of a half-open connection doesn't work all that well in 
> python/asyncore anyway, so given the framework within which zope 
> operates, zope isn't to blame either.
> 
> Given that no browser (that I know of) does this half-closing thing, I 
> would argue that varnish should at the very least offer a shutdown 
> option for probing, so as to appear more like a browser.
> 
> In addition, HTTP 1.1 usually leaves the connection open unless you ask 
> for it to be closed, so it almost seems more common not to shutdown the 
> one end.
> 
> It seems then that the only way to "fix" this is to either put zope 
> behind apache or something else that can handle half-closing, or to 
> "fix" varnish.

Spot on -- good analysis of the problem.



Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkrYoMoACgkQ+gerLs4ltQ7X/QCfYFSSp1MOVuTryLynCvS3Khs9
AuMAn0bxsQ6zYdl82V4Ye5iFuFptL5tQ
=ka8O
-----END PGP SIGNATURE-----


More information about the Zope-Dev mailing list