From 1c850ea1d8a1292ca5867f2b49907848ca27ce8a Mon Sep 17 00:00:00 2001 From: Nikita Karmatskikh Date: Tue, 26 Nov 2024 13:12:05 +0300 Subject: [PATCH] Pass UDPAddr.Zone to net.ListenUDP listenUDPInPortRange wasn't passing the Zone and would always fail to bind. This would cause high CPU usage as every port in the range would be attempted and fail. Fixes #742 --- net.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/net.go b/net.go index 6e740a7..c03bbee 100644 --- a/net.go +++ b/net.go @@ -137,8 +137,13 @@ func listenUDPInPortRange(n transport.Net, log logging.LeveledLogger, portMax, p portStart := globalMathRandomGenerator.Intn(j-i+1) + i portCurrent := portStart for { - lAddr = &net.UDPAddr{IP: lAddr.IP, Port: portCurrent} - c, e := n.ListenUDP(network, lAddr) + addr := &net.UDPAddr{ + IP: lAddr.IP, + Zone: lAddr.Zone, + Port: portCurrent, + } + + c, e := n.ListenUDP(network, addr) if e == nil { return c, e //nolint:nilerr }