code: func (p *ReverseProxy) ServeConn(ctx context.Context, dconn net.Conn) {
  	transport := p.transport
  	if transport == nil {
  		panic("router: nil transport for proxy")
  	}
  	defer dconn.Close()
  
  	clientGone := dconn.(http.CloseNotifier).CloseNotify()
  	ctx, cancel := context.WithCancel(ctx)
  	defer cancel() // finish cancellation goroutine
  
  	go func() {
  		select {
  		case <-clientGone:
  			cancel() // client went away, cancel request
  		case <-ctx.Done():
  		}
  	}()
  
  	l := p.Logger.New("client_addr", dconn.RemoteAddr(), "host_addr", dconn.LocalAddr(), "proxy", "tcp")
  
  	uconn, err := transport.Connect(ctx, l)
  	if err != nil {
  		return
  	}
  	defer uconn.Close()
  
  	joinConns(uconn, dconn)
  }
docs: // ServeConn takes an inbound conn and proxies it to a backend.