summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/lib/libsocket.tex4
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/socketmodule.c27
3 files changed, 29 insertions, 4 deletions
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index de2f51d..09c4c8d 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -638,8 +638,8 @@ structures as strings).
\begin{methoddesc}[socket]{shutdown}{how}
Shut down one or both halves of the connection. If \var{how} is
-\code{0}, further receives are disallowed. If \var{how} is \code{1},
-further sends are disallowed. If \var{how} is \code{2}, further sends
+\constant{SHUT_RD}, further receives are disallowed. If \var{how} is \constant{SHUT_WR},
+further sends are disallowed. If \var{how} is \constant{SHUT_RDWR}, further sends
and receives are disallowed.
\end{methoddesc}
diff --git a/Misc/NEWS b/Misc/NEWS
index c9b7baa..c523e65 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -95,6 +95,8 @@ Core and builtins
Extension modules
-----------------
+- socket.SHUT_{RD,WR,RDWR} was added.
+
- os.getsid was added.
- The pwd module incorrectly advertised its struct type as
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index f93da4e..6ca855f 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -2097,8 +2097,8 @@ sock_shutdown(PySocketSockObject *s, PyObject *arg)
PyDoc_STRVAR(shutdown_doc,
"shutdown(flag)\n\
\n\
-Shut down the reading side of the socket (flag == 0), the writing side\n\
-of the socket (flag == 1), or both ends (flag == 2).");
+Shut down the reading side of the socket (flag == SHUT_RD), the writing side\n\
+of the socket (flag == SHUT_WR), or both ends (flag == SHUT_RDWR).");
/* List of methods for socket objects */
@@ -4101,6 +4101,29 @@ init_socket(void)
PyModule_AddIntConstant(m, "NI_DGRAM", NI_DGRAM);
#endif
+ /* shutdown() parameters */
+#ifdef SHUT_RD
+ PyModule_AddIntConstant(m, "SHUT_RD", SHUT_RD);
+#elif defined(SD_RECEIVE)
+ PyModule_AddIntConstant(m, "SHUT_RD", SD_RECEIVE);
+#else
+ PyModule_AddIntConstant(m, "SHUT_RD", 0);
+#endif
+#ifdef SHUT_WR
+ PyModule_AddIntConstant(m, "SHUT_WR", SHUT_WR);
+#elif defined(SD_SEND)
+ PyModule_AddIntConstant(m, "SHUT_WR", SD_SEND);
+#else
+ PyModule_AddIntConstant(m, "SHUT_WR", 1);
+#endif
+#ifdef SHUT_RDWR
+ PyModule_AddIntConstant(m, "SHUT_RDWR", SHUT_RDWR);
+#elif defined(SD_BOTH)
+ PyModule_AddIntConstant(m, "SHUT_RDWR", SD_BOTH);
+#else
+ PyModule_AddIntConstant(m, "SHUT_RDWR", 2);
+#endif
+
/* Initialize gethostbyname lock */
#if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK)
netdb_lock = PyThread_allocate_lock();