conn: document retry loop in StdNetBind.Open
It's not obvious on a first read what the loop is doing. Signed-off-by: Josh Bleecher Snyder <josharian@gmail.com>
This commit is contained in:
parent
204140016a
commit
517f0703f5
|
@ -89,6 +89,8 @@ func (bind *StdNetBind) Open(uport uint16) (uint16, error) {
|
||||||
return 0, ErrBindAlreadyOpen
|
return 0, ErrBindAlreadyOpen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Attempt to open ipv4 and ipv6 listeners on the same port.
|
||||||
|
// If uport is 0, we can retry on failure.
|
||||||
again:
|
again:
|
||||||
port := int(uport)
|
port := int(uport)
|
||||||
var ipv4, ipv6 *net.UDPConn
|
var ipv4, ipv6 *net.UDPConn
|
||||||
|
@ -98,6 +100,7 @@ again:
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Listen on the same port as we're using for ipv4.
|
||||||
ipv6, port, err = listenNet("udp6", port)
|
ipv6, port, err = listenNet("udp6", port)
|
||||||
if uport == 0 && errors.Is(err, syscall.EADDRINUSE) && tries < 100 {
|
if uport == 0 && errors.Is(err, syscall.EADDRINUSE) && tries < 100 {
|
||||||
ipv4.Close()
|
ipv4.Close()
|
||||||
|
|
Loading…
Reference in a new issue