From 40f0874b5556b278526ee9443b83efa2a6f723ca Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 24 Apr 2010 22:04:40 +0000 Subject: Issue #8524: When creating an SSL socket, the timeout value of the original socket wasn't retained (instead, a socket with a positive timeout would be turned into a non-blocking SSL socket). --- Lib/ssl.py | 1 + Lib/test/test_ssl.py | 29 ++++++++++++++++++----------- Misc/NEWS | 4 ++++ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Lib/ssl.py b/Lib/ssl.py index a42643f..f06792e 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -102,6 +102,7 @@ class SSLSocket(socket): type=sock.type, proto=sock.proto, fileno=_dup(sock.fileno())) + self.settimeout(sock.gettimeout()) sock.close() elif fileno is not None: socket.__init__(self, fileno=fileno) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index bd2aed5..3c03b59 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -151,6 +151,15 @@ class BasicTests(unittest.TestCase): del ss self.assertEqual(wr(), None) + def test_timeout(self): + # Issue #8524: when creating an SSL socket, the timeout of the + # original socket should be retained. + for timeout in (None, 0.0, 5.0): + s = socket.socket(socket.AF_INET) + s.settimeout(timeout) + ss = ssl.wrap_socket(s) + self.assertEqual(timeout, ss.gettimeout()) + class NetworkedTests(unittest.TestCase): @@ -1306,17 +1315,15 @@ else: started.wait() try: - if 0: - # Disabled until #8524 finds a solution - try: - c = socket.socket(socket.AF_INET) - c.settimeout(1.0) - c.connect((host, port)) - # Will attempt handshake and time out - self.assertRaisesRegexp(ssl.SSLError, "timed out", - ssl.wrap_socket, c) - finally: - c.close() + try: + c = socket.socket(socket.AF_INET) + c.settimeout(0.2) + c.connect((host, port)) + # Will attempt handshake and time out + self.assertRaisesRegexp(ssl.SSLError, "timed out", + ssl.wrap_socket, c) + finally: + c.close() try: c = socket.socket(socket.AF_INET) c = ssl.wrap_socket(c) diff --git a/Misc/NEWS b/Misc/NEWS index e98e95d..fb97f53 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -339,6 +339,10 @@ C-API Library ------- +- Issue #8524: When creating an SSL socket, the timeout value of the + original socket wasn't retained (instead, a socket with a positive timeout + would be turned into a non-blocking SSL socket). + - Issue #5103: SSL handshake would ignore the socket timeout and block indefinitely if the other end didn't respond. -- cgit v0.12