diff options
-rw-r--r-- | Lib/ssl.py | 1 | ||||
-rw-r--r-- | Lib/test/test_ssl.py | 29 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 23 insertions, 11 deletions
@@ -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) @@ -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. |