]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Support setting the Type-Of-Service field to 'throughput' for sockets (#1017)
authorVictor <vluchits@gmail.com>
Tue, 5 Aug 2025 16:20:08 +0000 (19:20 +0300)
committerGitHub <noreply@github.com>
Tue, 5 Aug 2025 16:20:08 +0000 (02:20 +1000)
socket.go
sockopts_unix.go
sockopts_wasm.go
sockopts_windows.go

index 606665e2e65b03f8493254d469faaf8e2082c8a1..8512da99e720b75c40c02cd34c988a93897a8735 100644 (file)
--- 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
index 52ec9e8d371a3fdf7a6cc1ec479b5c0bc4f6c324..ffffddd6ec2a7ffd175eb3620dab40dba3ca2c51 100644 (file)
@@ -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)
+}
index 9705b914201b5501ad026058cdbdad94a18de9ca..8411affe1fd93ad074ff47fceb61d4b99f8fcce0 100644 (file)
@@ -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
+}
index c3c0ab0494760af60cf8701e32a47ac804876b0e..9d8061a9eb3ec6d1371ddb80e263cb39ddee0854 100644 (file)
@@ -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
+}