From d59d7374a364c4e5c2b9a83d8e4543ee494285b8 Mon Sep 17 00:00:00 2001 From: Shane Harvey Date: Wed, 14 Jul 2021 15:53:15 -0700 Subject: bpo-34932: Add socket.TCP_KEEPALIVE for macOS (GH-25079) --- Doc/library/socket.rst | 2 ++ Lib/test/test_socket.py | 7 +++++++ Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst | 1 + Modules/socketmodule.c | 4 ++++ 4 files changed, 14 insertions(+) create mode 100644 Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index d67df47..5634d81 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -381,6 +381,8 @@ Constants .. versionchanged:: 3.10 ``IP_RECVTOS`` was added. + Added ``TCP_KEEPALIVE``. On MacOS this constant can be used in the same + way that ``TCP_KEEPIDLE`` is used on Linux. .. data:: AF_CAN PF_CAN diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 828d1f3..c09f11e 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -6446,6 +6446,12 @@ class LinuxKernelCryptoAPI(unittest.TestCase): sock.bind(("type", "n" * 64)) +@unittest.skipUnless(sys.platform == 'darwin', 'macOS specific test') +class TestMacOSTCPFlags(unittest.TestCase): + def test_tcp_keepalive(self): + self.assertTrue(socket.TCP_KEEPALIVE) + + @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") class TestMSWindowsTCPFlags(unittest.TestCase): knownTCPFlags = { @@ -6704,6 +6710,7 @@ def test_main(): SendfileUsingSendfileTest, ]) tests.append(TestMSWindowsTCPFlags) + tests.append(TestMacOSTCPFlags) thread_info = threading_helper.threading_setup() support.run_unittest(*tests) diff --git a/Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst b/Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst new file mode 100644 index 0000000..d3a52c9 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst @@ -0,0 +1 @@ +Add socket.TCP_KEEPALIVE support for macOS. Patch by Shane Harvey. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 142cc7c..9233430 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -8159,6 +8159,10 @@ PyInit__socket(void) #ifdef TCP_KEEPIDLE PyModule_AddIntMacro(m, TCP_KEEPIDLE); #endif + /* TCP_KEEPALIVE is OSX's TCP_KEEPIDLE equivalent */ +#if defined(__APPLE__) && defined(TCP_KEEPALIVE) + PyModule_AddIntMacro(m, TCP_KEEPALIVE); +#endif #ifdef TCP_KEEPINTVL PyModule_AddIntMacro(m, TCP_KEEPINTVL); #endif -- cgit v0.12