浏览代码

Set unix.SO_REUSEPORT=1 for TPROXY Inbound FakeUDP

Solved some issues.
RPRX 4 年之前
父节点
当前提交
ae98dc75cf
共有 1 个文件被更改,包括 7 次插入0 次删除
  1. 7 0
      proxy/dokodemo/fakeudp_linux.go

+ 7 - 0
proxy/dokodemo/fakeudp_linux.go

@@ -7,6 +7,8 @@ import (
 	"net"
 	"os"
 	"syscall"
+
+	"golang.org/x/sys/unix"
 )
 
 func FakeUDP(addr *net.UDPAddr, mark int) (net.PacketConn, error) {
@@ -33,6 +35,11 @@ func FakeUDP(addr *net.UDPAddr, mark int) (net.PacketConn, error) {
 		return nil, &net.OpError{Op: "fake", Err: fmt.Errorf("set socket option: SO_REUSEADDR: %s", err)}
 	}
 
+	if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil {
+		syscall.Close(fileDescriptor)
+		return nil, &net.OpError{Op: "fake", Err: fmt.Errorf("set socket option: SO_REUSEPORT: %s", err)}
+	}
+
 	if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil {
 		syscall.Close(fileDescriptor)
 		return nil, &net.OpError{Op: "fake", Err: fmt.Errorf("set socket option: IP_TRANSPARENT: %s", err)}