summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authorRyan McGrath <ryan@rymc.io>2025-09-22 17:30:18 -0400
committerRyan McGrath <ryan@rymc.io>2025-09-22 17:30:18 -0400
commit5a6730ab4ed2a21d85fbfb7cf3fae20088d18fe6 (patch)
tree893cb9e3f15645037c0c4b05da533f91a30d1e06 /Source/Core/Common
parent79614956f39fc1f6d47ff3fcf6484ef19f4e1ae4 (diff)
macoS: update QoSSession with SO_NET_SERVICE_TYPE.
macOS does not support `SO_PRIORITY` on sockets, but it does apparently support configuring sockets with a priority flag via a parameter called `SO_NET_SERVICE_TYPE`. It doesn't appear to be especially well documented, but it seems to exist as far back as 10.11 (El Capitan). This patch sets QoSSession to treat connections as "responsive multimedia audio/video", which some docs appear to describe as "low delay tolerant, low-medium, loss tolerant, elastic flow, variable packet interval, rate and size".
Diffstat (limited to 'Source/Core/Common')
-rw-r--r--Source/Core/Common/QoSSession.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/Core/Common/QoSSession.cpp b/Source/Core/Common/QoSSession.cpp
index f143517427..e2e3914e53 100644
--- a/Source/Core/Common/QoSSession.cpp
+++ b/Source/Core/Common/QoSSession.cpp
@@ -54,6 +54,15 @@ QoSSession::~QoSSession()
#else
QoSSession::QoSSession(ENetPeer* peer, int tos_val)
{
+// Apple systems don't support SO_PRIORITY on BSD sockets, but they do support a flag for
+// marking sockets as a specific type of traffic. `NET_SERVICE_TYPE_RV` should roughly
+// correspond to "low delay tolerant, low-medium loss tolerant, elastic flow, variable
+// packet interval, rate and size".
+#if defined(__APPLE__)
+ constexpr int srv_type = NET_SERVICE_TYPE_RV;
+ setsockopt(peer->host->socket, SOL_SOCKET, SO_NET_SERVICE_TYPE, &srv_type, sizeof(srv_type));
+#endif
+
#if defined(__linux__)
constexpr int priority = 7;
setsockopt(peer->host->socket, SOL_SOCKET, SO_PRIORITY, &priority, sizeof(priority));