bpo-44077: Expose IP_RECVTOS in the socket module (GH-25992)


Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
(cherry picked from commit a317778fd58b1c6b250feffbdb4ecf15e293ef48)

Co-authored-by: Georg Sauthoff <mail@georg.so>
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 8a1fc96..914fdd7 100755
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -379,6 +379,9 @@
       On Windows, ``TCP_KEEPIDLE``, ``TCP_KEEPINTVL`` appear if run-time Windows
       supports.
 
+   .. versionchanged:: 3.10
+      ``IP_RECVTOS`` was added.
+
 .. data:: AF_CAN
           PF_CAN
           SOL_CAN_*
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 605cb64..249f0e9 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -1219,6 +1219,9 @@
 Add option to create MPTCP sockets with ``IPPROTO_MPTCP``
 (Contributed by Rui Cunha in :issue:`43571`.)
 
+Add ``IP_RECVTOS`` option to receive the type of service (ToS) or DSCP/ECN fields
+(Contributed by Georg Sauthoff in :issue:`44077`.)
+
 ssl
 ---
 
diff --git a/Misc/NEWS.d/next/Library/2021-05-13-19-44-38.bpo-44077.04b2a4.rst b/Misc/NEWS.d/next/Library/2021-05-13-19-44-38.bpo-44077.04b2a4.rst
new file mode 100644
index 0000000..7bb4379
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-05-13-19-44-38.bpo-44077.04b2a4.rst
@@ -0,0 +1,3 @@
+It's now possible to receive the type of service (ToS), a.k.a. differentiated
+services (DS), a.k.a. differenciated services code point (DSCP) and excplicit
+congestion notification (ECN) IP header fields with ``socket.IP_RECVTOS``.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 79559c0..142cc7c 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -8024,6 +8024,9 @@ PyInit__socket(void)
 #ifdef  IP_RECVRETOPTS
     PyModule_AddIntMacro(m, IP_RECVRETOPTS);
 #endif
+#ifdef  IP_RECVTOS
+    PyModule_AddIntMacro(m, IP_RECVTOS);
+#endif
 #ifdef  IP_RECVDSTADDR
     PyModule_AddIntMacro(m, IP_RECVDSTADDR);
 #endif