From ed1ade4266693c311e4c97bdb0790e34fe16929a Mon Sep 17 00:00:00 2001 From: nullptr Date: Sun, 13 Oct 2019 12:12:49 +0800 Subject: [PATCH] Add SO_REUSEPORT (kernel level load balance) support --- transport/internet/sockopt_linux.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/transport/internet/sockopt_linux.go b/transport/internet/sockopt_linux.go index db1cda9c9..c6ebf8919 100644 --- a/transport/internet/sockopt_linux.go +++ b/transport/internet/sockopt_linux.go @@ -3,6 +3,7 @@ package internet import ( "net" "syscall" + "golang.org/x/sys/unix" ) const ( @@ -13,11 +14,14 @@ const ( ) func bindAddr(fd uintptr, ip []byte, port uint32) error { - err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) - if err != nil { + if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil { return newError("failed to set resuse_addr").Base(err).AtWarning() } + if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil { + return newError("failed to set resuse_port").Base(err).AtWarning() + } + var sockaddr syscall.Sockaddr switch len(ip) {