mirror of https://github.com/docker/docs.git
Merge pull request #828 from ehazlett/vbox-tcp-port
vbox: fix race with getting a tcp port
This commit is contained in:
commit
cfeffa530f
|
|
@ -632,15 +632,25 @@ func zeroFill(w io.Writer, n int64) error {
|
|||
}
|
||||
|
||||
func getAvailableTCPPort() (int, error) {
|
||||
// FIXME: this has a race condition between finding an available port and
|
||||
// virtualbox using that port. Perhaps we should randomly pick an unused
|
||||
// port in a range not used by kernel for assigning ports
|
||||
ln, err := net.Listen("tcp4", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
return 0, err
|
||||
port := 0
|
||||
for i := 0; i <= 10; i++ {
|
||||
ln, err := net.Listen("tcp4", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
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
|
||||
return port, nil
|
||||
}
|
||||
time.Sleep(1)
|
||||
}
|
||||
defer ln.Close()
|
||||
addr := ln.Addr().String()
|
||||
addrParts := strings.SplitN(addr, ":", 2)
|
||||
return strconv.Atoi(addrParts[1])
|
||||
return 0, fmt.Errorf("unable to allocate tcp port")
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue