Commit 8315f967 authored by Antoine Pitrou's avatar Antoine Pitrou

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

Patch by Matt Joiner.
parents 8612b4c2 70deb3de
......@@ -199,6 +199,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
......
......@@ -1574,6 +1574,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)
......
......@@ -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.
......
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