Issue #13872: socket.detach() now marks the socket closed (as mirrored in the socket repr()).

Patch by Matt Joiner.
This commit is contained in:
Antoine Pitrou 2012-04-01 01:00:17 +02:00
parent 6211b88161
commit 70deb3de39
3 changed files with 15 additions and 0 deletions

View File

@ -197,6 +197,17 @@ class socket(_socket.socket):
if self._io_refs <= 0:
self._real_close()
def detach(self):
"""detach() -> file descriptor
Close the socket object without closing the underlying file descriptor.
The object cannot be used after this call, but the file descriptor
can be reused for other purposes. The file descriptor is returned.
"""
self._closed = True
return super().detach()
def fromfd(fd, family, type, proto=0):
""" fromfd(fd, family, type[, proto]) -> socket object

View File

@ -951,6 +951,7 @@ class BasicTCPTest(SocketConnectedTest):
f = self.cli_conn.detach()
self.assertEqual(f, fileno)
# cli_conn cannot be used anymore...
self.assertTrue(self.cli_conn._closed)
self.assertRaises(socket.error, self.cli_conn.recv, 1024)
self.cli_conn.close()
# ...but we can create another socket using the (still open)

View File

@ -31,6 +31,9 @@ Core and Builtins
Library
-------
- Issue #13872: socket.detach() now marks the socket closed (as mirrored
in the socket repr()). Patch by Matt Joiner.
- Issue #14406: Fix a race condition when using ``concurrent.futures.wait(
return_when=ALL_COMPLETED)``. Patch by Matt Joiner.