func (l *listenerWrapper) Accept() (net.Conn, error) {
	c, err := l.Listener.Accept()
	if err != nil {
		return nil, err
	}
	l.mu.Lock()
	l.rcw = newRawConnWrapperFromConn(c)
	l.mu.Unlock()
	return c, nil
}
Accept blocks until Dial is called, then returns a net.Conn for the server
half of the connection.
package test
import (
	"bytes"
	"fmt"
	"io"
	"net"
	"strings"
	"sync"
	"time"
	"golang.org/x/net/http2"
	"golang.org/x/net/http2/hpack"
)
type listenerWrapper struct {
	net.Listener
	mu  sync.Mutex
	rcw *rawConnWrapper
}
func listenWithConnControl(network, address string) (net.Listener, error) {
	l, err := net.Listen(network, address)
	if err != nil {
		return nil, err
	}
	return &listenerWrapper{Listener: l}, nil
}