Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3eca28c

Browse files
authored
bpo-29515: add missing socket.IPPROTO_* constants on Windows (GH-12183)
1 parent 8abd7c7 commit 3eca28c

3 files changed

Lines changed: 92 additions & 1 deletion

File tree

Lib/test/test_socket.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,8 @@ def testSendtoErrors(self):
867867
def testCrucialConstants(self):
868868
# Testing for mission critical constants
869869
socket.AF_INET
870+
if socket.has_ipv6:
871+
socket.AF_INET6
870872
socket.SOCK_STREAM
871873
socket.SOCK_DGRAM
872874
socket.SOCK_RAW
@@ -875,6 +877,23 @@ def testCrucialConstants(self):
875877
socket.SOL_SOCKET
876878
socket.SO_REUSEADDR
877879

880+
def testCrucialIpProtoConstants(self):
881+
socket.IPPROTO_TCP
882+
socket.IPPROTO_UDP
883+
if socket.has_ipv6:
884+
socket.IPPROTO_IPV6
885+
886+
@unittest.skipUnless(os.name == "nt", "Windows specific")
887+
def testWindowsSpecificConstants(self):
888+
socket.IPPROTO_ICLFXBM
889+
socket.IPPROTO_ST
890+
socket.IPPROTO_CBT
891+
socket.IPPROTO_IGP
892+
socket.IPPROTO_RDP
893+
socket.IPPROTO_PGM
894+
socket.IPPROTO_L2TP
895+
socket.IPPROTO_SCTP
896+
878897
def testHostnameRes(self):
879898
# Testing hostname resolution mechanisms
880899
hostname = socket.gethostname()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Add the following socket module constants on Windows:
2+
IPPROTO_AH
3+
IPPROTO_CBT
4+
IPPROTO_DSTOPTS
5+
IPPROTO_EGP
6+
IPPROTO_ESP
7+
IPPROTO_FRAGMENT
8+
IPPROTO_GGP
9+
IPPROTO_HOPOPTS
10+
IPPROTO_ICLFXBM
11+
IPPROTO_ICMPV6
12+
IPPROTO_IDP
13+
IPPROTO_IGMP
14+
IPPROTO_IGP
15+
IPPROTO_IPV4
16+
IPPROTO_IPV6
17+
IPPROTO_L2TP
18+
IPPROTO_MAX
19+
IPPROTO_ND
20+
IPPROTO_NONE
21+
IPPROTO_PGM
22+
IPPROTO_PIM
23+
IPPROTO_PUP
24+
IPPROTO_RDP
25+
IPPROTO_ROUTING
26+
IPPROTO_SCTP
27+
IPPROTO_ST

Modules/socketmodule.c

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,40 @@ if_indextoname(index) -- return the corresponding interface name\n\
309309
# include <fcntl.h>
310310
# endif
311311

312+
/* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */
313+
#ifdef MS_WINDOWS
314+
#define IPPROTO_ICMP IPPROTO_ICMP
315+
#define IPPROTO_IGMP IPPROTO_IGMP
316+
#define IPPROTO_GGP IPPROTO_GGP
317+
#define IPPROTO_TCP IPPROTO_TCP
318+
#define IPPROTO_PUP IPPROTO_PUP
319+
#define IPPROTO_UDP IPPROTO_UDP
320+
#define IPPROTO_IDP IPPROTO_IDP
321+
#define IPPROTO_ND IPPROTO_ND
322+
#define IPPROTO_RAW IPPROTO_RAW
323+
#define IPPROTO_MAX IPPROTO_MAX
324+
#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
325+
#define IPPROTO_IPV4 IPPROTO_IPV4
326+
#define IPPROTO_IPV6 IPPROTO_IPV6
327+
#define IPPROTO_ROUTING IPPROTO_ROUTING
328+
#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT
329+
#define IPPROTO_ESP IPPROTO_ESP
330+
#define IPPROTO_AH IPPROTO_AH
331+
#define IPPROTO_ICMPV6 IPPROTO_ICMPV6
332+
#define IPPROTO_NONE IPPROTO_NONE
333+
#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
334+
#define IPPROTO_EGP IPPROTO_EGP
335+
#define IPPROTO_PIM IPPROTO_PIM
336+
#define IPPROTO_ICLFXBM IPPROTO_ICLFXBM // WinSock2 only
337+
#define IPPROTO_ST IPPROTO_ST // WinSock2 only
338+
#define IPPROTO_CBT IPPROTO_CBT // WinSock2 only
339+
#define IPPROTO_IGP IPPROTO_IGP // WinSock2 only
340+
#define IPPROTO_RDP IPPROTO_RDP // WinSock2 only
341+
#define IPPROTO_PGM IPPROTO_PGM // WinSock2 only
342+
#define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only
343+
#define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only
344+
#endif /* MS_WINDOWS */
345+
312346
/* Provides the IsWindows7SP1OrGreater() function */
313347
#include <versionhelpers.h>
314348

@@ -356,7 +390,7 @@ remove_unusable_flags(PyObject *m)
356390

357391
for (int i=0; i<sizeof(win_runtime_flags)/sizeof(FlagRuntimeInfo); i++) {
358392
info.dwBuildNumber = win_runtime_flags[i].build_number;
359-
/* greater than or equal to the specified version?
393+
/* greater than or equal to the specified version?
360394
Compatibility Mode will not cheat VerifyVersionInfo(...) */
361395
if (VerifyVersionInfo(
362396
&info,
@@ -7659,6 +7693,17 @@ PyInit__socket(void)
76597693
PyModule_AddIntMacro(m, IPPROTO_MAX);
76607694
#endif
76617695

7696+
#ifdef MS_WINDOWS
7697+
PyModule_AddIntMacro(m, IPPROTO_ICLFXBM);
7698+
PyModule_AddIntMacro(m, IPPROTO_ST);
7699+
PyModule_AddIntMacro(m, IPPROTO_CBT);
7700+
PyModule_AddIntMacro(m, IPPROTO_IGP);
7701+
PyModule_AddIntMacro(m, IPPROTO_RDP);
7702+
PyModule_AddIntMacro(m, IPPROTO_PGM);
7703+
PyModule_AddIntMacro(m, IPPROTO_L2TP);
7704+
PyModule_AddIntMacro(m, IPPROTO_SCTP);
7705+
#endif
7706+
76627707
#ifdef SYSPROTO_CONTROL
76637708
PyModule_AddIntMacro(m, SYSPROTO_CONTROL);
76647709
#endif

0 commit comments

Comments
 (0)