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:
Josh Bleecher Snyder 2021-03-29 13:27:21 -07:00
parent 204140016a
commit 517f0703f5

View file

@ -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()