diff -r a1cd431a71c6 Lib/ssl.py --- a/Lib/ssl.py Sun Oct 28 11:13:51 2012 -0700 +++ b/Lib/ssl.py Mon Oct 29 18:19:14 2012 -0400 @@ -554,14 +554,10 @@ newsock, addr = socket.accept(self) return (SSLSocket(sock=newsock, - keyfile=self.keyfile, certfile=self.certfile, server_side=True, - cert_reqs=self.cert_reqs, - ssl_version=self.ssl_version, - ca_certs=self.ca_certs, - ciphers=self.ciphers, do_handshake_on_connect= - self.do_handshake_on_connect), + self.do_handshake_on_connect, + _context=self.context), addr) def get_channel_binding(self, cb_type="tls-unique"): diff -r a1cd431a71c6 Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py Sun Oct 28 11:13:51 2012 -0700 +++ b/Lib/test/test_ssl.py Mon Oct 29 18:19:14 2012 -0400 @@ -1369,6 +1369,37 @@ self.assertLess(before, after) s.close() + def test_server_accept(self): + # Issue16357 + sockname = ('127.0.0.1', 0) + evt = threading.Event() + def thread_main(): + nonlocal sockname + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + context.load_cert_chain(CERTFILE) + context.verify_mode = ssl.CERT_NONE + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) + s.bind(sockname) + sockname = s.getsockname() + + s = context.wrap_socket(s, server_side=True) + s.listen(5) + # Block on the accept and wait on the connection to close. If the + # context is passed in correctly to the SSLSocket on accept, then + # no exceptions should bubble up. + evt.set() + ssl_socket, peer = s.accept() + ssl_socket.recv(1) + + t = threading.Thread(target=thread_main) + t.start() + + # Client wait until server setup and perform a connect. + evt.wait() + sock = ssl.wrap_socket(socket.socket()) + sock.connect(sockname) + sock.close() + def test_empty_cert(self): """Connecting with an empty cert file""" bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir,