[Python-Dev] ssl module integration with asyncore (original) (raw)

Bill Janssen janssen at parc.com
Thu Nov 29 00:26:24 CET 2007


I tried to write a simple asyncore-based server code, then I used a simple client to establish a connection with it. Once the client is connected server raises the following exception:

I think this is a bug. Thanks!

The issue is that the internal call to do_handshake() doesn't handle non-blocking sockets properly.

You can work around the bug like this:

--- snippet --- import asyncore, asynchat, socket, ssl, select

class Handler(asyncore.dispatcher):

def __init__(self, conn):
    asyncore.dispatcher.__init__(self, conn)
    self.socket = ssl.wrap_socket(conn, server_side=True,
                                  certfile='keycert.pem',
                                  do_handshake_on_connect=False)
    while True:
        try:
            self.socket.do_handshake()
            break
        except ssl.SSLError, err:
            if err.args[0] == ssl.SSL_ERROR_WANT_READ:
                select.select([self.socket], [], [])
            elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
                select.select([], [self.socket], [])
            else:
                raise
    self.send('hi there')

--- /snippet ---

Bill



More information about the Python-Dev mailing list