@@ -41,12 +41,11 @@ func getAvailablePort() (int, error) {
41
41
return 0 , errors .WithStack (err )
42
42
}
43
43
44
- l , err := net .ListenTCP ("tcp" , addr )
45
- if err != nil {
44
+ if isPortAvailable (addr .Port ) != nil {
46
45
return 0 , errors .WithStack (err )
47
46
}
48
- defer l . Close ()
49
- return l . Addr ().( * net. TCPAddr ) .Port , nil
47
+
48
+ return addr .Port , nil
50
49
}
51
50
52
51
for range 1000 {
@@ -65,18 +64,18 @@ func getAvailablePort() (int, error) {
65
64
66
65
func selectPort (configPort int ) (int , error ) {
67
66
if configPort != 0 {
68
- return configPort , nil
67
+ return configPort , isPortAvailable ( configPort )
69
68
}
70
69
71
- if portStr , exists := os .LookupEnv ("PC_PORT_NUM " ); exists {
70
+ if portStr , exists := os .LookupEnv ("DEVBOX_PC_PORT_NUM " ); exists {
72
71
port , err := strconv .Atoi (portStr )
73
72
if err != nil {
74
- return 0 , fmt .Errorf ("invalid PC_PORT_NUM environment variable: %v" , err )
73
+ return 0 , fmt .Errorf ("invalid DEVBOX_PC_PORT_NUM environment variable: %v" , err )
75
74
}
76
75
if port <= 0 {
77
- return 0 , fmt .Errorf ("invalid PC_PORT_NUM environment variable: ports cannot be less than 0" )
76
+ return 0 , fmt .Errorf ("invalid DEVBOX_PC_PORT_NUM environment variable: ports cannot be less than 0" )
78
77
}
79
- return port , nil
78
+ return port , isPortAvailable ( port )
80
79
}
81
80
82
81
return getAvailablePort ()
@@ -86,11 +85,11 @@ func isAllowed(port int) bool {
86
85
return port > 1024 && disallowedPorts [port ] == ""
87
86
}
88
87
89
- func isPortAvailable (port int ) bool {
88
+ func isPortAvailable (port int ) error {
90
89
ln , err := net .Listen ("tcp" , fmt .Sprintf (":%d" , port ))
91
90
if err != nil {
92
- return false
91
+ return fmt . Errorf ( "port %d is already in use" , port )
93
92
}
94
93
ln .Close ()
95
- return true
94
+ return nil
96
95
}
0 commit comments