[Python-checkins] r80457 - in python/branches/release31-maint: Lib/ssl.py Lib/test/test_ssl.py Misc/NEWS

antoine.pitrou python-checkins at python.org
Sun Apr 25 00:07:51 CEST 2010


Author: antoine.pitrou
Date: Sun Apr 25 00:07:51 2010
New Revision: 80457

Log:
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).
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Lib/ssl.py
   python/branches/release31-maint/Lib/test/test_ssl.py
   python/branches/release31-maint/Misc/NEWS

Modified: python/branches/release31-maint/Lib/ssl.py
==============================================================================
--- python/branches/release31-maint/Lib/ssl.py	(original)
+++ python/branches/release31-maint/Lib/ssl.py	Sun Apr 25 00:07:51 2010
@@ -101,6 +101,7 @@
                             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)

Modified: python/branches/release31-maint/Lib/test/test_ssl.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_ssl.py	(original)
+++ python/branches/release31-maint/Lib/test/test_ssl.py	Sun Apr 25 00:07:51 2010
@@ -110,6 +110,15 @@
         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 @@
             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)

Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS	(original)
+++ python/branches/release31-maint/Misc/NEWS	Sun Apr 25 00:07:51 2010
@@ -40,6 +40,10 @@
 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.
 


More information about the Python-checkins mailing list