Browse Source

reverseproxy: Close websocket conn if req context cancels

This is a recent patch in the Go standard library
master
Matthew Holt 5 years ago
parent
commit
b3bff13f7d
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 15
      modules/caddyhttp/reverseproxy/streaming.go

15
modules/caddyhttp/reverseproxy/streaming.go

@ -49,7 +49,20 @@ func (h Handler) handleUpgradeResponse(rw http.ResponseWriter, req *http.Request
// p.getErrorHandler()(rw, req, fmt.Errorf("internal error: 101 switching protocols response with non-writable body"))
return
}
defer backConn.Close()
// adopted from https://github.com/golang/go/commit/8bcf2834afdf6a1f7937390903a41518715ef6f5
backConnCloseCh := make(chan struct{})
go func() {
// Ensure that the cancelation of a request closes the backend.
// See issue https://golang.org/issue/35559.
select {
case <-req.Context().Done():
case <-backConnCloseCh:
}
backConn.Close()
}()
defer close(backConnCloseCh)
conn, brw, err := hj.Hijack()
if err != nil {
// p.getErrorHandler()(rw, req, fmt.Errorf("Hijack failed on protocol switch: %v", err))

Loading…
Cancel
Save