From d1e5f9d145c435201c5ddb82f8d8b2f51c1c23fb Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 4 Oct 2021 09:46:49 +0300 Subject: [PATCH] Fix windows build --- network/sockopts.go | 18 +++--------------- network/sockopts_unix.go | 31 +++++++++++++++++++++++++++++++ network/sockopts_windows.go | 10 ++++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 network/sockopts_unix.go create mode 100644 network/sockopts_windows.go diff --git a/network/sockopts.go b/network/sockopts.go index 685d90a..241b034 100644 --- a/network/sockopts.go +++ b/network/sockopts.go @@ -3,8 +3,6 @@ package network import ( "fmt" "net" - - "golang.org/x/sys/unix" ) // SetClientSocketOptions tunes a TCP socket that represents a connection to @@ -53,19 +51,9 @@ func setCommonSocketOptions(conn *net.TCPConn, bufferSize int) error { return fmt.Errorf("cannot get underlying raw connection: %w", err) } - rawConn.Control(func(fd uintptr) { // nolint: errcheck - err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) - if err != nil { - err = fmt.Errorf("cannot set SO_REUSEADDR: %w", err) - - return - } - - err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) - if err != nil { - err = fmt.Errorf("cannot set SO_REUSEPORT: %w", err) - } - }) + if err := setSocketReuseAddrPort(rawConn, bufferSize); err != nil { + return fmt.Errorf("cannot setup SO_REUSEADDR/PORT: %w", err) + } return nil } diff --git a/network/sockopts_unix.go b/network/sockopts_unix.go new file mode 100644 index 0000000..b45b95d --- /dev/null +++ b/network/sockopts_unix.go @@ -0,0 +1,31 @@ +//go:build !windows +// +build !windows + +package network + +import ( + "fmt" + "syscall" + + "golang.org/x/sys/unix" +) + +func setSocketReuseAddrPort(conn syscall.RawConn, bufferSize int) error { + var err error + + conn.Control(func(fd uintptr) { // nolint: errcheck + err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) + if err != nil { + err = fmt.Errorf("cannot set SO_REUSEADDR: %w", err) + + return + } + + err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) + if err != nil { + err = fmt.Errorf("cannot set SO_REUSEPORT: %w", err) + } + }) + + return err +} diff --git a/network/sockopts_windows.go b/network/sockopts_windows.go new file mode 100644 index 0000000..fbeae83 --- /dev/null +++ b/network/sockopts_windows.go @@ -0,0 +1,10 @@ +//go:build windows +// +build windows + +package network + +import "syscall" + +func setSocketReuseAddrPort(conn syscall.RawConn, bufferSize int) error { + return nil +}