destroy (cb) {
    debug('destroy conn pool')

    if (this.utpServer) {
      this.utpServer.removeListener('connection', this._onUTPConnectionBound)
      this.utpServer.removeListener('listening', this._onListening)
      this.utpServer.removeListener('error', this._onUTPError)
    }

    this.tcpServer.removeListener('connection', this._onTCPConnectionBound)
    this.tcpServer.removeListener('error', this._onTCPError)

    // Destroy all open connection objects so server can close gracefully without waiting
    // for connection timeout or remote peer to disconnect.
    this._pendingConns.forEach((conn) => {
      conn.on('error', noop)
      conn.destroy()
    })

    if (this.utpServer) {
      try {
        this.utpServer.close(cb)
      } catch (err) {
        if (cb) queueMicrotask(cb)
      }
    }

    try {
      this.tcpServer.close(cb)
    } catch (err) {
      if (cb) queueMicrotask(cb)
    }

    this.tcpServer = null
    this.utpServer = null
    this._client = null
    this._pendingConns = null
  }
Destroy this Conn pool.
@param  {function} cb