Browse Source

fix windows build

Misaki Kasumi 1 year ago
parent
commit
4efdc8016b

+ 13 - 0
transport/internet/socket_activation_other.go

@@ -0,0 +1,13 @@
+//go:build !unix
+// +build !unix
+
+package internet
+
+import (
+	"fmt"
+	"github.com/v2fly/v2ray-core/v5/common/net"
+)
+
+func activate_socket(address string) (net.Listener, error) {
+	return nil, fmt.Errorf("socket activation is not supported on this platform")
+}

+ 22 - 0
transport/internet/socket_activation_unix.go

@@ -0,0 +1,22 @@
+//go:build unix
+// +build unix
+
+package internet
+
+import (
+	"os"
+	"strconv"
+	"syscall"
+
+	"github.com/v2fly/v2ray-core/v5/common/net"
+)
+
+func activate_socket(address string) (net.Listener, error) {
+	fd, err := strconv.Atoi(address[8:])
+	if err != nil {
+		return nil, err
+	}
+	// Ignore the fail of SetNonblock: it's merely an optimization so that Go can poll this fd.
+	_ = syscall.SetNonblock(fd, true)
+	return net.FileListener(os.NewFile(uintptr(fd), address))
+}

+ 2 - 6
transport/internet/system_listener.go

@@ -96,12 +96,8 @@ func (dl *DefaultListener) Listen(ctx context.Context, addr net.Addr, sockopt *S
 				address = string(fullAddr)
 			}
 		} else if strings.HasPrefix(address, "/dev/fd/") {
-			fd, err := strconv.Atoi(address[8:])
-			if err != nil {
-				return nil, err
-			}
-			_ = syscall.SetNonblock(fd, true)
-			l, err = net.FileListener(os.NewFile(uintptr(fd), address))
+			// socket activation
+			l, err = activate_socket(address)
 			if err != nil {
 				return nil, err
 			}