Browse Source

Refine pick port logic (#481)

Loyalsoldier 5 years ago
parent
commit
45aeaa8080
2 changed files with 25 additions and 17 deletions
  1. 11 7
      testing/servers/tcp/port.go
  2. 14 10
      testing/servers/udp/port.go

+ 11 - 7
testing/servers/tcp/port.go

@@ -1,16 +1,20 @@
 package tcp
 
-import (
-	"v2ray.com/core/common"
-	"v2ray.com/core/common/net"
-)
+import "v2ray.com/core/common/net"
 
-// PickPort returns an unused TCP port in the system. The port returned is highly likely to be unused, but not guaranteed.
+// PickPort returns an unused TCP port of the system.
 func PickPort() net.Port {
-	listener, err := net.Listen("tcp4", "127.0.0.1:0")
-	common.Must(err)
+	listener := pickPort()
 	defer listener.Close()
 
 	addr := listener.Addr().(*net.TCPAddr)
 	return net.Port(addr.Port)
 }
+
+func pickPort() net.Listener {
+	listener, err := net.Listen("tcp4", "127.0.0.1:0")
+	if err != nil {
+		listener = pickPort()
+	}
+	return listener
+}

+ 14 - 10
testing/servers/udp/port.go

@@ -1,19 +1,23 @@
 package udp
 
-import (
-	"v2ray.com/core/common"
-	"v2ray.com/core/common/net"
-)
+import "v2ray.com/core/common/net"
 
-// PickPort returns an unused UDP port in the system. The port returned is highly likely to be unused, but not guaranteed.
+// PickPort returns an unused UDP port of the system.
 func PickPort() net.Port {
-	conn, err := net.ListenUDP("udp4", &net.UDPAddr{
-		IP:   net.LocalHostIP.IP(),
-		Port: 0,
-	})
-	common.Must(err)
+	conn := pickPort()
 	defer conn.Close()
 
 	addr := conn.LocalAddr().(*net.UDPAddr)
 	return net.Port(addr.Port)
 }
+
+func pickPort() *net.UDPConn {
+	conn, err := net.ListenUDP("udp4", &net.UDPAddr{
+		IP:   net.LocalHostIP.IP(),
+		Port: 0,
+	})
+	if err != nil {
+		conn = pickPort()
+	}
+	return conn
+}