From c2203f92ff05840873d68ae6369a302c7db4948e Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 24 Apr 2010 22:07:51 +0000 Subject: Merged revisions 80456 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r80456 | antoine.pitrou | 2010-04-25 00:04:40 +0200 (dim., 25 avril 2010) | 5 lines 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 ebb11b4..caee2e5 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -101,6 +101,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 403f6bf..7eea4b8 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -110,6 +110,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): @@ -1262,17 +1271,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 df89d37..dd02c3d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -40,6 +40,10 @@ Core and Builtins 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