mirror of https://github.com/docker/docs.git
vbox: fix race with getting a tcp port
Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
parent
407f75d109
commit
4e10204b8e
|
|
@ -628,15 +628,25 @@ func zeroFill(w io.Writer, n int64) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAvailableTCPPort() (int, error) {
|
func getAvailableTCPPort() (int, error) {
|
||||||
// FIXME: this has a race condition between finding an available port and
|
port := 0
|
||||||
// virtualbox using that port. Perhaps we should randomly pick an unused
|
for {
|
||||||
// port in a range not used by kernel for assigning ports
|
ln, err := net.Listen("tcp4", "127.0.0.1:0")
|
||||||
ln, err := net.Listen("tcp4", "127.0.0.1:0")
|
if err != nil {
|
||||||
if err != nil {
|
return 0, err
|
||||||
return 0, err
|
}
|
||||||
|
defer ln.Close()
|
||||||
|
addr := ln.Addr().String()
|
||||||
|
addrParts := strings.SplitN(addr, ":", 2)
|
||||||
|
p, err := strconv.Atoi(addrParts[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if p != 0 {
|
||||||
|
port = p
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(1)
|
||||||
}
|
}
|
||||||
defer ln.Close()
|
|
||||||
addr := ln.Addr().String()
|
return port, nil
|
||||||
addrParts := strings.SplitN(addr, ":", 2)
|
|
||||||
return strconv.Atoi(addrParts[1])
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue