diff --git a/tcp_packet_conn.go b/tcp_packet_conn.go index 99a462d..264dea4 100644 --- a/tcp_packet_conn.go +++ b/tcp_packet_conn.go @@ -194,9 +194,10 @@ func (t *tcpPacketConn) removeConn(conn net.Conn) { func (t *tcpPacketConn) Close() error { t.mu.Lock() + var shouldCloseRecvChan bool t.closeOnce.Do(func() { close(t.closedChan) - close(t.recvChan) + shouldCloseRecvChan = true }) for _, conn := range t.conns { @@ -208,6 +209,10 @@ func (t *tcpPacketConn) Close() error { t.wg.Wait() + if shouldCloseRecvChan { + close(t.recvChan) + } + return nil }