import select import socket import ssl s = socket.socket(socket.AF_INET) s.connect(('people.csail.mit.edu', 443)) s.setblocking(False) print 'starting handshake' while True: try: s = ssl.wrap_socket(s, cert_reqs=ssl.CERT_NONE) break except ssl.SSLError, err: if err.args[0] == ssl.SSL_ERROR_WANT_READ: print 'need read' select.select([s], [], []) elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE: print 'need write' select.select([], [s], []) else: raise print 'handshake complete' s.close()