control/controlhttp/controlhttpserver: detach websocket conns from request context
The websocket upgrade path bound the returned conn's reads and writes to the context passed to AcceptHTTP via wsconn.NetConn. That context is typically an http.Request context, which net/http cancels once the calling handler returns, so a caller that served the accepted conn beyond its handler's lifetime had the conn killed out from under it. The hijack-based HTTP/1 upgrade path has no such binding. Make the two paths consistent: ctx now only bounds the handshake (its deadline, if any, is applied to the conn by controlbase.Server) and the returned conn's lifetime is the caller's responsibility. Document that contract on AcceptHTTP and add a regression test that uses a websocket-accepted conn after the accepting handler has returned. Updates tailscale/corp#46806 Updates tailscale/corp#29053 Change-Id: I4fc4ea5cddc2c6174fdf21f8d832f2e0984a7533 Co-authored-by: Adriano Sela Aviles <adriano@tailscale.com> Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
B
Brad Fitzpatrick committed
f29f127acede4f4757dc7d64526f54d076153101
Parent: f9417e3
Committed by Brad Fitzpatrick <brad@danga.com>
on 8/19/2026, 2:58:47 PM