From 1e4547e26244e9e8130838272220c217f08d524f Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Tue, 11 Sep 2018 10:03:26 +0200 Subject: [PATCH] simplify tcp network detection --- transport/internet/sockopt.go | 9 ++++++ transport/internet/sockopt_darwin.go | 5 ++- transport/internet/sockopt_linux.go | 5 ++- transport/internet/sockopt_windows.go | 44 +++++++++++++-------------- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/transport/internet/sockopt.go b/transport/internet/sockopt.go index 604e4545..48d230dd 100644 --- a/transport/internet/sockopt.go +++ b/transport/internet/sockopt.go @@ -1 +1,10 @@ package internet + +func isTCPSocket(network string) bool { + switch network { + case "tcp", "tcp4", "tcp6": + return true + default: + return false + } +} diff --git a/transport/internet/sockopt_darwin.go b/transport/internet/sockopt_darwin.go index 7fb5eafe..3db792ca 100644 --- a/transport/internet/sockopt_darwin.go +++ b/transport/internet/sockopt_darwin.go @@ -1,7 +1,6 @@ package internet import ( - "strings" "syscall" ) @@ -12,7 +11,7 @@ const ( ) func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { - if strings.HasPrefix(network, "tcp") { + if isTCPSocket(network) { switch config.Tfo { case SocketConfig_Enable: if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, TCP_FASTOPEN_CLIENT); err != nil { @@ -29,7 +28,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) error { - if strings.HasPrefix(network, "tcp") { + if isTCPSocket(network) { switch config.Tfo { case SocketConfig_Enable: if err := syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, TCP_FASTOPEN_SERVER); err != nil { diff --git a/transport/internet/sockopt_linux.go b/transport/internet/sockopt_linux.go index e3285e3e..31ea9036 100644 --- a/transport/internet/sockopt_linux.go +++ b/transport/internet/sockopt_linux.go @@ -1,7 +1,6 @@ package internet import ( - "strings" "syscall" ) @@ -19,7 +18,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } } - if strings.HasPrefix(network, "tcp") { + if isTCPSocket(network) { switch config.Tfo { case SocketConfig_Enable: if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, TCP_FASTOPEN_CONNECT, 1); err != nil { @@ -36,7 +35,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) error { - if strings.HasPrefix(network, "tcp") { + if isTCPSocket(network) { switch config.Tfo { case SocketConfig_Enable: if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, TCP_FASTOPEN, 1); err != nil { diff --git a/transport/internet/sockopt_windows.go b/transport/internet/sockopt_windows.go index dc22eff3..0bd4c3e3 100644 --- a/transport/internet/sockopt_windows.go +++ b/transport/internet/sockopt_windows.go @@ -1,7 +1,6 @@ package internet import ( - "strings" "syscall" ) @@ -9,34 +8,35 @@ const ( TCP_FASTOPEN = 15 ) -func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { - if strings.HasPrefix(network, "tcp") { - switch config.Tfo { - case SocketConfig_Enable: - if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, 1); err != nil { - return err - } - case SocketConfig_Disable: - if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, 0); err != nil { - return err - } +func setTFO(fd syscall.Handle, settings SocketConfig_TCPFastOpenState) error { + switch settings { + case SocketConfig_Enable: + if err := syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, TCP_FASTOPEN, 1); err != nil { + return err } + case SocketConfig_Disable: + if err := syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, TCP_FASTOPEN, 0); err != nil { + return err + } + } + return nil +} + +func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { + if isTCPSocket(network) { + if err := setTFO(syscall.Hanle(fd), config.Tfo); err != nil { + return err + } + } return nil } func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) error { - if strings.HasPrefix(network, "tcp") { - switch config.Tfo { - case SocketConfig_Enable: - if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, 1); err != nil { - return err - } - case SocketConfig_Disable: - if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_TCP, TCP_FASTOPEN, 0); err != nil { - return err - } + if isTCPSocket(network) { + if err := setTFO(syscall.Hanle(fd), config.Tfo); err != nil { + return err } }