It's not obvious on a first read what the loop is doing.
Signed-off-by: Josh Bleecher Snyder <josharian@gmail.com>
return 0, ErrBindAlreadyOpen
}
+ // Attempt to open ipv4 and ipv6 listeners on the same port.
+ // If uport is 0, we can retry on failure.
again:
port := int(uport)
var ipv4, ipv6 *net.UDPConn
return 0, err
}
+ // Listen on the same port as we're using for ipv4.
ipv6, port, err = listenNet("udp6", port)
if uport == 0 && errors.Is(err, syscall.EADDRINUSE) && tries < 100 {
ipv4.Close()