From 81aba11a4af9831a5f4f12b21effad561f8601ed Mon Sep 17 00:00:00 2001 From: Josh Deprez Date: Sat, 30 Mar 2024 17:13:13 +1100 Subject: [PATCH] Use read deadline to quit incoming loop --- main.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index ab5682f..ac8e9db 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "flag" "log" "net" @@ -9,6 +10,7 @@ import ( "os/signal" "regexp" "sync" + "time" "gitea.drjosh.dev/josh/jrouter/aurp" ) @@ -115,11 +117,14 @@ func main() { if ctx.Err() != nil { return } - + ln.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) pktbuf := make([]byte, 65536) pktlen, raddr, readErr := ln.ReadFromUDP(pktbuf) - // net.PacketConn.ReadFrom: "Callers should always process - // the n > 0 bytes returned before considering the error err." + + var operr *net.OpError + if errors.As(readErr, &operr) && operr.Timeout() { + continue + } log.Printf("Received packet of length %d from %v", pktlen, raddr)