diff --git a/service/listeners.go b/service/listeners.go index 13e0dc6e..bbcfb1a4 100644 --- a/service/listeners.go +++ b/service/listeners.go @@ -285,12 +285,10 @@ func (m *multiPacketListener) Acquire() (net.PacketConn, error) { m.readCh = make(chan readRequest) m.doneCh = make(chan struct{}) go func() { + defer close(m.readCh) buffer := make([]byte, serverUDPBufferSize) for { n, addr, err := m.pc.ReadFrom(buffer) - if errors.Is(err, net.ErrClosed) { - return - } buffer = buffer[:n] select { case req := <-m.readCh: @@ -303,6 +301,9 @@ func (m *multiPacketListener) Acquire() (net.PacketConn, error) { case <-m.doneCh: return } + if errors.Is(err, net.ErrClosed) { + return + } } }() }