[Python-Dev] ssl module integration with asyncore

Giampaolo Rodola' gnewsg at gmail.com
Wed Nov 28 03:19:58 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:


--- snippet ---
C:\Documents and Settings\billiejoex\Desktop\test>test.py
[]127.0.0.1:3003 Connected.
Traceback (most recent call last):
  File "C:\Documents and Settings\billiejoex\Desktop\test\test.py",
line 40, in
<module>
    asyncore.loop(timeout=1)
  File "C:\Python26\lib\asyncore.py", line 191, in loop
    poll_fun(timeout, map)
  File "C:\Python26\lib\asyncore.py", line 132, in poll
    read(obj)
  File "C:\Python26\lib\asyncore.py", line 72, in read
    obj.handle_error()
  File "C:\Python26\lib\asyncore.py", line 68, in read
    obj.handle_read_event()
  File "C:\Python26\lib\asyncore.py", line 384, in handle_read_event
    self.handle_accept()
  File "C:\Documents and Settings\billiejoex\Desktop\test\test.py",
line 33, in
handle_accept
    Handler(sock_obj)
  File "C:\Documents and Settings\billiejoex\Desktop\test\test.py",
line 9, in _
_init__
    certfile='keycert.pem')
  File "C:\Python26\lib\ssl.py", line 466, in wrap_socket
    ssl_version=ssl_version, ca_certs=ca_certs)
  File "C:\Python26\lib\ssl.py", line 103, in __init__
    cert_reqs, ssl_version, ca_certs)
ssl.SSLError: [Errno 2] _ssl.c:429: The operation did not complete
(read)
--- /snippet ---




This is the server code I used.
Note that 'keycert.pem' is the certificate file I found in the test
directory.


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

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')
        self.send('hi there')

    def readable(self):
        if isinstance(self.socket, ssl.SSLSocket):
            while self.socket.pending() > 0:
                self.handle_read_event()
        return True

    def handle_error(self):
        raise

class Server(asyncore.dispatcher):

    def __init__(self):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.bind(('', 54321))
        self.listen(5)

    def handle_accept(self):
        sock_obj, addr = self.accept()
        print "[]%s:%s Connected." %addr
        Handler(sock_obj)

    def handle_error(self):
        raise

Server()
asyncore.loop(timeout=1)
--- snippet ---


More information about the Python-Dev mailing list