Bug #978833: Close https sockets by releasing the _ssl object.
This commit is contained in:
parent
ec2ce9bbae
commit
f25e35b9ec
|
@ -1117,6 +1117,9 @@ class FakeSocket(SharedSocketClient):
|
|||
def __getattr__(self, attr):
|
||||
return getattr(self._sock, attr)
|
||||
|
||||
def close(self):
|
||||
SharedSocketClient.close(self)
|
||||
self._ssl = None
|
||||
|
||||
class HTTPSConnection(HTTPConnection):
|
||||
"This class allows communication via SSL."
|
||||
|
|
|
@ -144,6 +144,10 @@ class _closedsocket(object):
|
|||
send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
|
||||
__getattr__ = _dummy
|
||||
|
||||
# Wrapper around platform socket objects. This implements
|
||||
# a platform-independent dup() functionality. The
|
||||
# implementation currently relies on reference counting
|
||||
# to close the underlying socket object.
|
||||
class _socketobject(object):
|
||||
|
||||
__doc__ = _realsocket.__doc__
|
||||
|
|
|
@ -106,6 +106,25 @@ class BasicTests(unittest.TestCase):
|
|||
connector()
|
||||
t.join()
|
||||
|
||||
def test_978833(self):
|
||||
if test_support.verbose:
|
||||
print "test_978833 ..."
|
||||
|
||||
import os, httplib
|
||||
with test_support.transient_internet():
|
||||
s = socket.socket(socket.AF_INET)
|
||||
s.connect(("www.sf.net", 443))
|
||||
fd = s._sock.fileno()
|
||||
sock = httplib.FakeSocket(s, socket.ssl(s))
|
||||
s = None
|
||||
sock.close()
|
||||
try:
|
||||
os.fstat(fd)
|
||||
except OSError:
|
||||
pass
|
||||
else:
|
||||
raise test_support.TestFailed("Failed to close socket")
|
||||
|
||||
class OpenSSLTests(unittest.TestCase):
|
||||
|
||||
def testBasic(self):
|
||||
|
|
Loading…
Reference in New Issue