[Python-checkins] r80516 - in python/branches/release31-maint: Lib/ssl.py

antoine.pitrou python-checkins at python.org
Tue Apr 27 00:37:59 CEST 2010


Author: antoine.pitrou
Date: Tue Apr 27 00:37:59 2010
New Revision: 80516

Log:
Merged revisions 80515 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r80515 | antoine.pitrou | 2010-04-27 00:17:47 +0200 (mar., 27 avril 2010) | 4 lines
  
  Hopefully fix sporadic Windows issue by avoiding calling getpeername()
  on a freshly dup'ed socket.
........


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

Modified: python/branches/release31-maint/Lib/ssl.py
==============================================================================
--- python/branches/release31-maint/Lib/ssl.py	(original)
+++ python/branches/release31-maint/Lib/ssl.py	Tue Apr 27 00:37:59 2010
@@ -82,6 +82,7 @@
 import base64        # for DER-to-PEM translation
 import traceback
 import errno
+import time
 
 class SSLSocket(socket):
 
@@ -96,6 +97,7 @@
                  family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None,
                  suppress_ragged_eofs=True):
 
+        connected = False
         if sock is not None:
             socket.__init__(self,
                             family=sock.family,
@@ -103,26 +105,27 @@
                             proto=sock.proto,
                             fileno=_dup(sock.fileno()))
             self.settimeout(sock.gettimeout())
+            # see if it's connected
+            try:
+                sock.getpeername()
+            except socket_error as e:
+                if e.errno != errno.ENOTCONN:
+                    raise
+            else:
+                connected = True
             sock.close()
         elif fileno is not None:
             socket.__init__(self, fileno=fileno)
         else:
             socket.__init__(self, family=family, type=type, proto=proto)
 
-        self._closed = False
-
         if certfile and not keyfile:
             keyfile = certfile
-        # see if it's connected
-        try:
-            socket.getpeername(self)
-        except socket_error as e:
-            if e.errno != errno.ENOTCONN:
-                raise
-            # no, no connection yet
-            self._sslobj = None
-        else:
-            # yes, create the SSL object
+
+        self._closed = False
+        self._sslobj = None
+        if connected:
+            # create the SSL object
             try:
                 self._sslobj = _ssl.sslwrap(self, server_side,
                                             keyfile, certfile,


More information about the Python-checkins mailing list