diff options
| author | Ryan McGrath <ryan@rymc.io> | 2025-09-22 17:30:18 -0400 |
|---|---|---|
| committer | Ryan McGrath <ryan@rymc.io> | 2025-09-22 17:30:18 -0400 |
| commit | 5a6730ab4ed2a21d85fbfb7cf3fae20088d18fe6 (patch) | |
| tree | 893cb9e3f15645037c0c4b05da533f91a30d1e06 /Source/Core/Common | |
| parent | 79614956f39fc1f6d47ff3fcf6484ef19f4e1ae4 (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.cpp | 9 |
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)); |
