func (t *T) Addr() net.Addr {
	return t.l.Addr()
}
Addr returns the wrapped listener's network address.
package listener
import (
	"errors"
	"net"
	"runtime"
	"sync"
	"sync/atomic"
)
type mode int8
const (
	Manual mode = iota
	Automatic
	Deadline
)
func Wrap(l net.Listener, m mode) *T {
	t := &T{
		l:    l,
		mode: m,
		shards: make([]shard, 2*runtime.NumCPU()),
	}
	for i := range t.shards {
		t.shards[i].init(t)
	}
	return t
}
type T struct {
	mu sync.Mutex
	l  net.Listener
	connCount uint64
	shards    []shard
	mode mode
}
var _ net.Listener = &T{}
func (t *T) Accept() (net.Conn, error) {
	c, err := t.l.Accept()
	if err != nil {
		return nil, err
	}
	connID := atomic.AddUint64(&t.connCount, 1)
	shard := &t.shards[int(connID)%len(t.shards)]
	wc := &conn{
		Conn:  c,
		shard: shard,
		mode:  t.mode,
	}
	if err = wc.init(); err != nil {
		return nil, err
	}
	return wc, nil
}