Browse Source

Merge pull request #1940 from enihcam/master

Add SO_REUSEPORT (kernel level load balance) support
Kslr 6 years ago
parent
commit
d0ac3e9d8e
1 changed files with 6 additions and 2 deletions
  1. 6 2
      transport/internet/sockopt_linux.go

+ 6 - 2
transport/internet/sockopt_linux.go

@@ -3,6 +3,7 @@ package internet
 import (
 import (
 	"net"
 	"net"
 	"syscall"
 	"syscall"
+	"golang.org/x/sys/unix"
 )
 )
 
 
 const (
 const (
@@ -13,11 +14,14 @@ const (
 )
 )
 
 
 func bindAddr(fd uintptr, ip []byte, port uint32) error {
 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()
 		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
 	var sockaddr syscall.Sockaddr
 
 
 	switch len(ip) {
 	switch len(ip) {