Kaydet (Commit) 28f7ab64 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

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.
........
üst 365171d8
...@@ -82,6 +82,7 @@ from socket import socket, AF_INET, SOCK_STREAM ...@@ -82,6 +82,7 @@ from socket import socket, AF_INET, SOCK_STREAM
import base64 # for DER-to-PEM translation import base64 # for DER-to-PEM translation
import traceback import traceback
import errno import errno
import time
class SSLSocket(socket): class SSLSocket(socket):
...@@ -96,6 +97,7 @@ class SSLSocket(socket): ...@@ -96,6 +97,7 @@ class SSLSocket(socket):
family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None,
suppress_ragged_eofs=True): suppress_ragged_eofs=True):
connected = False
if sock is not None: if sock is not None:
socket.__init__(self, socket.__init__(self,
family=sock.family, family=sock.family,
...@@ -103,26 +105,27 @@ class SSLSocket(socket): ...@@ -103,26 +105,27 @@ class SSLSocket(socket):
proto=sock.proto, proto=sock.proto,
fileno=_dup(sock.fileno())) fileno=_dup(sock.fileno()))
self.settimeout(sock.gettimeout()) 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() sock.close()
elif fileno is not None: elif fileno is not None:
socket.__init__(self, fileno=fileno) socket.__init__(self, fileno=fileno)
else: else:
socket.__init__(self, family=family, type=type, proto=proto) socket.__init__(self, family=family, type=type, proto=proto)
self._closed = False
if certfile and not keyfile: if certfile and not keyfile:
keyfile = certfile keyfile = certfile
# see if it's connected
try: self._closed = False
socket.getpeername(self) self._sslobj = None
except socket_error as e: if connected:
if e.errno != errno.ENOTCONN: # create the SSL object
raise
# no, no connection yet
self._sslobj = None
else:
# yes, create the SSL object
try: try:
self._sslobj = _ssl.sslwrap(self, server_side, self._sslobj = _ssl.sslwrap(self, server_side,
keyfile, certfile, keyfile, certfile,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment