From 9d85aba9e245c1a0f6d1879f8bc6c260cb4eb721 Mon Sep 17 00:00:00 2001
From: David CARLIER <devnexen@gmail.com>
Date: Mon, 9 May 2022 00:19:41 +0100
Subject: [PATCH] gh-91968: Add socket constants SO_USER_COOKIE/SO_RTABLE from
 BSD (#91967)

Those are somewhat equivalent to Linux' SO_MARK.

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
---
 Doc/library/socket.rst                                      | 5 +++++
 .../Library/2022-04-26-18-37-24.gh-issue-91968.fuuH1_.rst   | 1 +
 Modules/socketmodule.c                                      | 6 ++++++
 3 files changed, 12 insertions(+)
 create mode 100644 Misc/NEWS.d/next/Library/2022-04-26-18-37-24.gh-issue-91968.fuuH1_.rst

diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index ee1aee5278b..4c193b892bd 100755
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -392,6 +392,11 @@ Constants
       Added ``TCP_CONNECTION_INFO``. On MacOS this constant can be used in the
       same way that ``TCP_INFO`` is used on Linux and BSD.
 
+   .. versionchanged:: 3.12
+      Added ``SO_RTABLE`` and ``SO_USER_COOKIE``. On OpenBSD
+      and FreeBSD respectively those constants can be used in the same way that
+      ``SO_MARK`` is used on Linux.
+
 .. data:: AF_CAN
           PF_CAN
           SOL_CAN_*
diff --git a/Misc/NEWS.d/next/Library/2022-04-26-18-37-24.gh-issue-91968.fuuH1_.rst b/Misc/NEWS.d/next/Library/2022-04-26-18-37-24.gh-issue-91968.fuuH1_.rst
new file mode 100644
index 00000000000..f16f5d3a668
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-04-26-18-37-24.gh-issue-91968.fuuH1_.rst
@@ -0,0 +1 @@
+Add ``SO_RTABLE`` and ``SO_USER_COOKIE`` constants to :mod:`socket`.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 9aefa443c7c..f376513fead 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -7595,6 +7595,12 @@ PyInit__socket(void)
 #ifdef  SO_MARK
     PyModule_AddIntMacro(m, SO_MARK);
 #endif
+#ifdef  SO_USER_COOKIE
+    PyModule_AddIntMacro(m, SO_USER_COOKIE);
+#endif
+#ifdef  SO_RTABLE
+    PyModule_AddIntMacro(m, SO_RTABLE);
+#endif
 #ifdef SO_DOMAIN
     PyModule_AddIntMacro(m, SO_DOMAIN);
 #endif
-- 
GitLab