diff --git a/src/device/input/raw/udp.go b/src/device/input/raw/udp.go index 96f24fa..edfc7b4 100644 --- a/src/device/input/raw/udp.go +++ b/src/device/input/raw/udp.go @@ -33,18 +33,26 @@ func (udp UDP) listen() { for udp.ctx.Err() == nil { buff := make([]byte, 256) n, _, err := udp.conn.ReadFrom(buff) - if err != nil { + if err != nil && udp.ctx.Err() == nil { panic(err) } if debugging { log.Printf("raw.UDP.Read() => %s", buff[:n]) } - udp.c <- buff[:n] + select { + case udp.c <- buff[:n]: + case <-udp.ctx.Done(): + } } } func (udp UDP) Read() []byte { - return <-udp.c + select { + case v := <-udp.c: + return v + case <-udp.ctx.Done(): + return []byte{} + } } func (udp UDP) Close() {