From f96ed20aa0a78dc500a763acda892f757f5e0e3c Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 7 Apr 2026 22:22:19 +0900 Subject: [PATCH] Fix broadcast collection: UDP reader blocks until deadline, 500ms timeout everywhere --- lib/client/udp.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/client/udp.go b/lib/client/udp.go index 348a2ee..9985bc4 100644 --- a/lib/client/udp.go +++ b/lib/client/udp.go @@ -118,17 +118,20 @@ func (t *udpTransport) SetReadTimeout(timeout time.Duration) { } func (t *udpTransport) Reader() io.Reader { - for { - if t.buf.Len() > 0 { - return &t.buf - } - pkt := make([]byte, 1500) - n, err := t.conn.Read(pkt) - if err != nil { - return &t.buf - } - t.buf.Write(pkt[:n]) + return t +} + +func (t *udpTransport) Read(p []byte) (int, error) { + if t.buf.Len() > 0 { + return t.buf.Read(p) } + pkt := make([]byte, 1500) + n, err := t.conn.Read(pkt) + if err != nil { + return 0, err + } + t.buf.Write(pkt[:n]) + return t.buf.Read(p) } func (t *udpTransport) Broadcast() bool { return t.broadcast }