From: Victor Date: Tue, 5 Aug 2025 16:20:08 +0000 (+0300) Subject: Support setting the Type-Of-Service field to 'throughput' for sockets (#1017) X-Git-Tag: v1.59.0~3 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f4dc49bf8c3cfa69df3b85c92b07ce67afabc1c2;p=btrtrc.git Support setting the Type-Of-Service field to 'throughput' for sockets (#1017) --- diff --git a/socket.go b/socket.go index 606665e2..8512da99 100644 --- a/socket.go +++ b/socket.go @@ -44,12 +44,17 @@ func listen(n network, addr string, f firewallCallback, logger log.Logger) (sock // connect to other clients that actually try to holepunch TCP. const dialTcpFromListenPort = false +var SocketIPTypeOfService = 0 + var tcpListenConfig = net.ListenConfig{ Control: func(network, address string, c syscall.RawConn) (err error) { controlErr := c.Control(func(fd uintptr) { if dialTcpFromListenPort { err = setReusePortSockOpts(fd) } + if err == nil && SocketIPTypeOfService != 0 { + err = setSockIPTOS(fd, SocketIPTypeOfService) + } }) if err != nil { return @@ -88,6 +93,9 @@ func listenTcp(network, address string) (s socket, err error) { if dialTcpFromListenPort { err = setReusePortSockOpts(fd) } + if err == nil && SocketIPTypeOfService != 0 { + err = setSockIPTOS(fd, SocketIPTypeOfService) + } }) if err == nil { err = controlErr diff --git a/sockopts_unix.go b/sockopts_unix.go index 52ec9e8d..ffffddd6 100644 --- a/sockopts_unix.go +++ b/sockopts_unix.go @@ -27,3 +27,7 @@ func setReusePortSockOpts(fd uintptr) (err error) { func setSockNoLinger(fd uintptr) (err error) { return syscall.SetsockoptLinger(int(fd), syscall.SOL_SOCKET, syscall.SO_LINGER, &lingerOffVal) } + +func setSockIPTOS(fd uintptr, val int) (err error) { + return syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_TOS, val) +} diff --git a/sockopts_wasm.go b/sockopts_wasm.go index 9705b914..8411affe 100644 --- a/sockopts_wasm.go +++ b/sockopts_wasm.go @@ -10,3 +10,7 @@ func setReusePortSockOpts(fd uintptr) error { func setSockNoLinger(fd uintptr) error { return nil } + +func setSockIPTOS(fd uintptr, val int) (err error) { + return nil +} diff --git a/sockopts_windows.go b/sockopts_windows.go index c3c0ab04..9d8061a9 100644 --- a/sockopts_windows.go +++ b/sockopts_windows.go @@ -13,3 +13,7 @@ func setReusePortSockOpts(fd uintptr) (err error) { func setSockNoLinger(fd uintptr) (err error) { return syscall.SetsockoptLinger(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_LINGER, &lingerOffVal) } + +func setSockIPTOS(fd uintptr, val int) (err error) { + return nil +}