Bill Janssen wrote: > Jean-Paul Calderone <exarkun at divmod.com> wrote: > >> On Wed, 17 Sep 2008 10:40:01 PDT, Bill Janssen <janssen at parc.com> wrote: >>> Ah, now I remember. It seems that sometimes when SSL_ERROR_WANT_READ >>> was returned, things would block; that is, the "handle_read" method on >>> asyncore.dispatcher was never called again, so the SSLSocket.recv() >>> method was never re-called. There are several levels of buffering going >>> on, and I never figured out just why that was. This (very rare) re-call >>> of "read" is to handle that. >>> >> You certainly do need to call read again if OpenSSL fails an SSL_read with >> a want-read error, but in asyncore, you don't want to do it right away, >> you want to wait until the socket becomes readable again, otherwise you *do* >> block waiting for bytes from the network. See the SSL support in Twisted >> for an example of the correct way to handle this. >> >> Jean-Paul > > Yes, I understand, and that's how I started out. The bug we were seeing > was that "handle_read" wasn't being called again by asyncore. It's probably worth sticking a comment in the code explaining why we're taking the risk of temporarily blocking on a non-blocking socket (i.e. until someone figures out how to reproduce that bug reliably so that a more correct fix can be devised). Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4