Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
and make it return the file descriptor.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index fc671e0..b1a616e 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1870,19 +1870,19 @@
 Close the socket.  It cannot be used after this call.");
 
 static PyObject *
-sock_forget(PySocketSockObject *s)
+sock_detach(PySocketSockObject *s)
 {
+    SOCKET_T fd = s->sock_fd;
     s->sock_fd = -1;
-    Py_INCREF(Py_None);
-    return Py_None;
+    return PyLong_FromSocket_t(fd);
 }
 
-PyDoc_STRVAR(forget_doc,
-"forget()\n\
+PyDoc_STRVAR(detach_doc,
+"detach()\n\
 \n\
 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.");
+can be reused for other purposes.  The file descriptor is returned.");
 
 static int
 internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen,
@@ -2772,10 +2772,10 @@
                       connect_doc},
     {"connect_ex",        (PyCFunction)sock_connect_ex, METH_O,
                       connect_ex_doc},
+    {"detach",            (PyCFunction)sock_detach, METH_NOARGS,
+                      detach_doc},
     {"fileno",            (PyCFunction)sock_fileno, METH_NOARGS,
                       fileno_doc},
-    {"forget",            (PyCFunction)sock_forget, METH_NOARGS,
-                      forget_doc},
 #ifdef HAVE_GETPEERNAME
     {"getpeername",       (PyCFunction)sock_getpeername,
                       METH_NOARGS, getpeername_doc},