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.
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 75d86b7..2b43266 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -548,6 +548,14 @@
    this limitation.
 
 
+.. method:: socket.forget()
+
+   Put the socket object into closed state without actually closing the
+   underlying file descriptor.  This allows the latter to be reused.
+
+   .. versionadded:: 3.2
+
+
 .. method:: socket.getpeername()
 
    Return the remote address to which the socket is connected.  This is useful to
diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index f4802a0..487298f 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -136,6 +136,12 @@
 
   (Contributed by Tarek Ziadé.)
 
+* Socket objects now have a :meth:`~socket.socket.forget()` method which
+  puts the socket into closed state without actually closing the underlying
+  file descriptor.  The latter can then be reused for other purposes.
+
+  (Added by Antoine Pitrou; :issue:`8524`.)
+
 * The *sqlite3* module has some new features:
 
   * XXX *enable_load_extension*