diff options
Diffstat (limited to 'relay/server.go')
| -rw-r--r-- | relay/server.go | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/relay/server.go b/relay/server.go index 085929c..d4a1edd 100644 --- a/relay/server.go +++ b/relay/server.go | |||
| @@ -98,7 +98,10 @@ func (s *Server) handleWS(w http.ResponseWriter, r *http.Request) { | |||
| 98 | s.mu.Add(1) | 98 | s.mu.Add(1) |
| 99 | go func() { | 99 | go func() { |
| 100 | defer s.mu.Done() | 100 | defer s.mu.Done() |
| 101 | ctx := r.Context() | 101 | // r.Context() is cancelled by the HTTP server when Hijack is called, |
| 102 | // so we use a fresh context. The connection manages its own lifecycle | ||
| 103 | // via the ping loop and WebSocket close frames. | ||
| 104 | ctx := context.Background() | ||
| 102 | h.serve(ctx) | 105 | h.serve(ctx) |
| 103 | if err := c.CloseConn(); err != nil { | 106 | if err := c.CloseConn(); err != nil { |
| 104 | // Ignore close errors — connection may already be gone. | 107 | // Ignore close errors — connection may already be gone. |
