diff --git a/service/listeners.go b/service/listeners.go index ab0f2287..fce2771f 100644 --- a/service/listeners.go +++ b/service/listeners.go @@ -162,6 +162,7 @@ func (pc *virtualPacketConn) Close() error { if pc.readCh == nil { return nil } + close(pc.closeCh) pc.readCh = nil return nil @@ -293,7 +294,11 @@ func (m *multiPacketListener) Acquire() (net.PacketConn, error) { go func() { for { select { - case req := <-m.readCh: + case req, ok := <-m.readCh: + if !ok { + // The read channel is closed. + return + } n, addr, err := m.pc.ReadFrom(req.buffer) req.respCh <- struct { n int