[Python-checkins] bpo-29515: add missing socket.IPPROTO_* constants on Windows (GH-12183)

Giampaolo Rodola webhook-mailer at python.org
Thu Mar 28 10:20:48 EDT 2019


https://github.com/python/cpython/commit/3eca28c61363a03b81b9fb12775490d6e42d8ecf
commit: 3eca28c61363a03b81b9fb12775490d6e42d8ecf
branch: master
author: Giampaolo Rodola <g.rodola at gmail.com>
committer: GitHub <noreply at github.com>
date: 2019-03-28T15:20:30+01:00
summary:

bpo-29515: add missing socket.IPPROTO_* constants on Windows (GH-12183)

files:
A Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst
M Lib/test/test_socket.py
M Modules/socketmodule.c

diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 08c7cdef73dd..8a990ea31410 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -867,6 +867,8 @@ def testSendtoErrors(self):
     def testCrucialConstants(self):
         # Testing for mission critical constants
         socket.AF_INET
+        if socket.has_ipv6:
+            socket.AF_INET6
         socket.SOCK_STREAM
         socket.SOCK_DGRAM
         socket.SOCK_RAW
@@ -875,6 +877,23 @@ def testCrucialConstants(self):
         socket.SOL_SOCKET
         socket.SO_REUSEADDR
 
+    def testCrucialIpProtoConstants(self):
+        socket.IPPROTO_TCP
+        socket.IPPROTO_UDP
+        if socket.has_ipv6:
+            socket.IPPROTO_IPV6
+
+    @unittest.skipUnless(os.name == "nt", "Windows specific")
+    def testWindowsSpecificConstants(self):
+        socket.IPPROTO_ICLFXBM
+        socket.IPPROTO_ST
+        socket.IPPROTO_CBT
+        socket.IPPROTO_IGP
+        socket.IPPROTO_RDP
+        socket.IPPROTO_PGM
+        socket.IPPROTO_L2TP
+        socket.IPPROTO_SCTP
+
     def testHostnameRes(self):
         # Testing hostname resolution mechanisms
         hostname = socket.gethostname()
diff --git a/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst b/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst
new file mode 100644
index 000000000000..2f3f0991d9a2
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst
@@ -0,0 +1,27 @@
+Add the following socket module constants on Windows:
+IPPROTO_AH
+IPPROTO_CBT
+IPPROTO_DSTOPTS
+IPPROTO_EGP
+IPPROTO_ESP
+IPPROTO_FRAGMENT
+IPPROTO_GGP
+IPPROTO_HOPOPTS
+IPPROTO_ICLFXBM
+IPPROTO_ICMPV6
+IPPROTO_IDP
+IPPROTO_IGMP
+IPPROTO_IGP
+IPPROTO_IPV4
+IPPROTO_IPV6
+IPPROTO_L2TP
+IPPROTO_MAX
+IPPROTO_ND
+IPPROTO_NONE
+IPPROTO_PGM
+IPPROTO_PIM
+IPPROTO_PUP
+IPPROTO_RDP
+IPPROTO_ROUTING
+IPPROTO_SCTP
+IPPROTO_ST
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index b48f8a9c3093..c024542fe709 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -309,6 +309,40 @@ if_indextoname(index) -- return the corresponding interface name\n\
 #  include <fcntl.h>
 # endif
 
+/* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */
+#ifdef MS_WINDOWS
+#define IPPROTO_ICMP IPPROTO_ICMP
+#define IPPROTO_IGMP IPPROTO_IGMP
+#define IPPROTO_GGP IPPROTO_GGP
+#define IPPROTO_TCP IPPROTO_TCP
+#define IPPROTO_PUP IPPROTO_PUP
+#define IPPROTO_UDP IPPROTO_UDP
+#define IPPROTO_IDP IPPROTO_IDP
+#define IPPROTO_ND IPPROTO_ND
+#define IPPROTO_RAW IPPROTO_RAW
+#define IPPROTO_MAX IPPROTO_MAX
+#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
+#define IPPROTO_IPV4 IPPROTO_IPV4
+#define IPPROTO_IPV6 IPPROTO_IPV6
+#define IPPROTO_ROUTING IPPROTO_ROUTING
+#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT
+#define IPPROTO_ESP IPPROTO_ESP
+#define IPPROTO_AH IPPROTO_AH
+#define IPPROTO_ICMPV6 IPPROTO_ICMPV6
+#define IPPROTO_NONE IPPROTO_NONE
+#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
+#define IPPROTO_EGP IPPROTO_EGP
+#define IPPROTO_PIM IPPROTO_PIM
+#define IPPROTO_ICLFXBM IPPROTO_ICLFXBM  // WinSock2 only
+#define IPPROTO_ST IPPROTO_ST  // WinSock2 only
+#define IPPROTO_CBT IPPROTO_CBT  // WinSock2 only
+#define IPPROTO_IGP IPPROTO_IGP  // WinSock2 only
+#define IPPROTO_RDP IPPROTO_RDP  // WinSock2 only
+#define IPPROTO_PGM IPPROTO_PGM  // WinSock2 only
+#define IPPROTO_L2TP IPPROTO_L2TP  // WinSock2 only
+#define IPPROTO_SCTP IPPROTO_SCTP  // WinSock2 only
+#endif /* MS_WINDOWS */
+
 /* Provides the IsWindows7SP1OrGreater() function */
 #include <versionhelpers.h>
 
@@ -356,7 +390,7 @@ remove_unusable_flags(PyObject *m)
 
     for (int i=0; i<sizeof(win_runtime_flags)/sizeof(FlagRuntimeInfo); i++) {
         info.dwBuildNumber = win_runtime_flags[i].build_number;
-        /* greater than or equal to the specified version? 
+        /* greater than or equal to the specified version?
            Compatibility Mode will not cheat VerifyVersionInfo(...) */
         if (VerifyVersionInfo(
                 &info,
@@ -7659,6 +7693,17 @@ PyInit__socket(void)
     PyModule_AddIntMacro(m, IPPROTO_MAX);
 #endif
 
+#ifdef  MS_WINDOWS
+    PyModule_AddIntMacro(m, IPPROTO_ICLFXBM);
+    PyModule_AddIntMacro(m, IPPROTO_ST);
+    PyModule_AddIntMacro(m, IPPROTO_CBT);
+    PyModule_AddIntMacro(m, IPPROTO_IGP);
+    PyModule_AddIntMacro(m, IPPROTO_RDP);
+    PyModule_AddIntMacro(m, IPPROTO_PGM);
+    PyModule_AddIntMacro(m, IPPROTO_L2TP);
+    PyModule_AddIntMacro(m, IPPROTO_SCTP);
+#endif
+
 #ifdef  SYSPROTO_CONTROL
     PyModule_AddIntMacro(m, SYSPROTO_CONTROL);
 #endif



More information about the Python-checkins mailing list