From 0d788b728c2bc67285f5846c9372a8ef0f16f1ee Mon Sep 17 00:00:00 2001 From: notsure2 Date: Mon, 29 May 2023 18:13:37 +0300 Subject: [PATCH] Restore windows compatibility. --- internal/client/piper.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/internal/client/piper.go b/internal/client/piper.go index bc53b67..3d7b91d 100644 --- a/internal/client/piper.go +++ b/internal/client/piper.go @@ -105,26 +105,32 @@ func RouteTCP(listener net.Listener, streamTimeout time.Duration, singleplex boo continue } - file, err := localConn.(*net.TCPConn).File() + syscallConn, err := localConn.(*net.TCPConn).SyscallConn() if err != nil { log.Fatal(err) continue } - if sendBufferSize > 0 { - log.Debugf("Setting loopback connection tcp send buffer: %d", sendBufferSize) - err := syscall.SetsockoptInt(common.Platformfd(file.Fd()), syscall.SOL_SOCKET, syscall.SO_SNDBUF, sendBufferSize) - if err != nil { - log.Errorf("setsocketopt SO_SNDBUF: %s\n", err) + err = syscallConn.Control(func(fd uintptr) { + if sendBufferSize > 0 { + log.Debugf("Setting loopback connection tcp send buffer: %d", sendBufferSize) + err := syscall.SetsockoptInt(common.Platformfd(fd), syscall.SOL_SOCKET, syscall.SO_SNDBUF, sendBufferSize) + if err != nil { + log.Errorf("setsocketopt SO_SNDBUF: %s\n", err) + } } - } - if receiveBufferSize > 0 { - log.Debugf("Setting loopback connection tcp receive buffer: %d", receiveBufferSize) - err = syscall.SetsockoptInt(common.Platformfd(file.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF, receiveBufferSize) - if err != nil { - log.Errorf("setsocketopt SO_RCVBUF: %s\n", err) + if receiveBufferSize > 0 { + log.Debugf("Setting loopback connection tcp receive buffer: %d", receiveBufferSize) + err = syscall.SetsockoptInt(common.Platformfd(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF, receiveBufferSize) + if err != nil { + log.Errorf("setsocketopt SO_RCVBUF: %s\n", err) + } } + }) + if err != nil { + log.Fatal(err) + continue } if !singleplex && (sesh == nil || sesh.IsClosed()) {