diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2010-08-08 23:24:50 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-08-08 23:24:50 (GMT) |
commit | e43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149 (patch) | |
tree | e15aa8c051472ddb7ec9a684d9a4e546ee3e14ca /Lib | |
parent | ba8a98600eddc5e2a87a9148e634ada1a1056495 (diff) | |
download | cpython-e43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149.zip cpython-e43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149.tar.gz cpython-e43f9d0ed69addbc34bac4af1b3ad7f1bdd3b149.tar.bz2 |
Issue #8524: Add a forget() method to socket objects, so as to put the
socket into the closed state without closing the underlying file
descriptor.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ssl.py | 5 | ||||
-rw-r--r-- | Lib/test/test_socket.py | 13 |
2 files changed, 15 insertions, 3 deletions
@@ -79,7 +79,6 @@ from _ssl import ( from socket import getnameinfo as _getnameinfo from socket import error as socket_error -from socket import dup as _dup from socket import socket, AF_INET, SOCK_STREAM import base64 # for DER-to-PEM translation import traceback @@ -148,7 +147,7 @@ class SSLSocket(socket): family=sock.family, type=sock.type, proto=sock.proto, - fileno=_dup(sock.fileno())) + fileno=sock.fileno()) self.settimeout(sock.gettimeout()) # see if it's connected try: @@ -158,7 +157,7 @@ class SSLSocket(socket): raise else: connected = True - sock.close() + sock.forget() elif fileno is not None: socket.__init__(self, fileno=fileno) else: diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 25025dd..ae34c11 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -655,6 +655,19 @@ class BasicTCPTest(SocketConnectedTest): self.serv_conn.send(MSG) self.serv_conn.shutdown(2) + def testForget(self): + # Testing forget() + f = self.cli_conn.fileno() + self.cli_conn.forget() + self.assertRaises(socket.error, self.cli_conn.recv, 1024) + self.cli_conn.close() + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, fileno=f) + msg = sock.recv(1024) + self.assertEqual(msg, MSG) + + def _testForget(self): + self.serv_conn.send(MSG) + @unittest.skipUnless(thread, 'Threading required for this test.') class BasicUDPTest(ThreadedUDPSocketTest): |