[Python-Dev] ssl module, non-blocking sockets and asyncore integration

Jean-Paul Calderone exarkun at divmod.com
Wed Sep 17 20:37:26 CEST 2008


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


More information about the Python-Dev mailing list