bpo-35569: Expose RFC 3542 IPv6 socket options on macOS (GH-19526)

This commit is contained in:
Erlend Egeberg Aasland 2020-05-17 08:32:46 +02:00 committed by GitHub
parent d7184d3dbd
commit 9a45bfe6f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 2 deletions

View File

@ -959,6 +959,37 @@ class GeneralModuleTests(unittest.TestCase):
socket.IPPROTO_L2TP socket.IPPROTO_L2TP
socket.IPPROTO_SCTP socket.IPPROTO_SCTP
@unittest.skipUnless(sys.platform == 'darwin', 'macOS specific test')
@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
def test3542SocketOptions(self):
# Ref. issue #35569 and https://tools.ietf.org/html/rfc3542
opts = {
'IPV6_CHECKSUM',
'IPV6_DONTFRAG',
'IPV6_DSTOPTS',
'IPV6_HOPLIMIT',
'IPV6_HOPOPTS',
'IPV6_NEXTHOP',
'IPV6_PATHMTU',
'IPV6_PKTINFO',
'IPV6_RECVDSTOPTS',
'IPV6_RECVHOPLIMIT',
'IPV6_RECVHOPOPTS',
'IPV6_RECVPATHMTU',
'IPV6_RECVPKTINFO',
'IPV6_RECVRTHDR',
'IPV6_RECVTCLASS',
'IPV6_RTHDR',
'IPV6_RTHDRDSTOPTS',
'IPV6_RTHDR_TYPE_0',
'IPV6_TCLASS',
'IPV6_USE_MIN_MTU',
}
for opt in opts:
self.assertTrue(
hasattr(socket, opt), f"Missing RFC3542 socket option '{opt}'"
)
def testHostnameRes(self): def testHostnameRes(self):
# Testing hostname resolution mechanisms # Testing hostname resolution mechanisms
hostname = socket.gethostname() hostname = socket.gethostname()

View File

@ -0,0 +1 @@
Expose RFC 3542 IPv6 socket options.

View File

@ -1116,8 +1116,12 @@ class PyBuildExt(build_ext):
def detect_socket(self): def detect_socket(self):
# socket(2) # socket(2)
if not VXWORKS: if not VXWORKS:
self.add(Extension('_socket', ['socketmodule.c'], kwargs = {'depends': ['socketmodule.h']}
depends=['socketmodule.h'])) if MACOS:
# Issue #35569: Expose RFC 3542 socket options.
kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542']
self.add(Extension('_socket', ['socketmodule.c'], **kwargs))
elif self.compiler.find_library_file(self.lib_dirs, 'net'): elif self.compiler.find_library_file(self.lib_dirs, 'net'):
libs = ['net'] libs = ['net']
self.add(Extension('_socket', ['socketmodule.c'], self.add(Extension('_socket', ['socketmodule.c'],