From 30b96ba083e4ef61051f125770b50bd278712539 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 9 Feb 2021 18:45:12 +0100 Subject: conn: try harder to have v4 and v6 ports agree Signed-off-by: Jason A. Donenfeld --- conn/conn_default.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'conn/conn_default.go') diff --git a/conn/conn_default.go b/conn/conn_default.go index 4f6b6d1..22248af 100644 --- a/conn/conn_default.go +++ b/conn/conn_default.go @@ -99,7 +99,9 @@ func extractErrno(err error) error { func createBind(uport uint16) (Bind, uint16, error) { var err error var bind nativeBind + var tries int +again: port := int(uport) bind.ipv4, port, err = listenNet("udp4", port) @@ -108,6 +110,10 @@ func createBind(uport uint16) (Bind, uint16, error) { } bind.ipv6, port, err = listenNet("udp6", port) + if uport == 0 && err != nil && extractErrno(err) == syscall.EADDRINUSE && tries < 100 { + tries++ + goto again + } if err != nil && extractErrno(err) != syscall.EAFNOSUPPORT { bind.ipv4.Close() bind.ipv4 = nil -- cgit v1.2.3