listen.go
func WrapTransportListener(ctx context.Context, ml transport.Listener, local peer.ID,
	sk ic.PrivKey) (iconn.Listener, error) {
	return WrapTransportListenerWithProtector(ctx, ml, local, sk, nil)
}
func WrapTransportListener(ctx context.Context, ml transport.Listener, local peer.ID,
	sk ic.PrivKey) (iconn.Listener, error) {
	return WrapTransportListenerWithProtector(ctx, ml, local, sk, nil)
}
// WrapTransportListener wraps a raw transport.Listener in an iconn.Listener.
// If sk is not provided, transport encryption is disabled.
//
// The Listener will accept connections in the background and attempt to
// negotiate the protocol before making the wrapped connection available to Accept.
// If the negotiation and handshake take more than AcceptTimeout, the connection
// is dropped. However, note that once a connection handshake succeeds, it will
// wait indefinitely for an Accept call to service it (possibly consuming a goroutine).
//
// The context covers the listener and its background activities, but not the
// connections once returned from Accept. Calling Close and canceling the
// context are equivalent.
//
// The returned Listener implements ListenerConnWrapper.