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:55 +02:00
commit 8315f96764
3 changed files with 15 additions and 0 deletions

View file

@ -199,6 +199,17 @@ def close(self):
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

@ -1574,6 +1574,7 @@ def testDetach(self):
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

@ -37,6 +37,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.