[Python-Dev] ssl module, non-blocking sockets and asyncore integration (original) (raw)
Jean-Paul Calderone exarkun at divmod.com
Wed Sep 17 20:37:26 CEST 2008
- Previous message: [Python-Dev] ssl module, non-blocking sockets and asyncore integration
- Next message: [Python-Dev] ssl module, non-blocking sockets and asyncore integration
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 SSLERRORWANTREAD was returned, things would block; that is, the "handleread" 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
- Previous message: [Python-Dev] ssl module, non-blocking sockets and asyncore integration
- Next message: [Python-Dev] ssl module, non-blocking sockets and asyncore integration
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]