mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-26 00:00:54 +00:00
Codex/OpenAI upstream switched from a WebSocket pool to HTTP/2. The outbound H2 transport set neither ReadIdleTimeout nor ResponseHeaderTimeout (the OpenAI profile forces ResponseHeaderTimeout=0), so a pooled H2 connection silently killed by a proxy/NAT becomes a "dead connection": both ends believe it is alive and a request assigned to it hangs until the OS TCP retransmit timeout (minutes) before the first byte — observed as an 8m37s TTFT with an eventual 200. Occasional (only when a request lands on a dead pooled conn) and across all groups (shared OpenAI transport); worse on larger idle pools. Explicitly configure http2 on the openai_h2 transport and enable active PING health checks (ReadIdleTimeout=15s, PingTimeout=15s) so dead connections are detected and evicted at the source, instead of relying on ResponseHeaderTimeout as an after-the-fact backstop. Scoped to the openai_h2 path only; Claude/Gemini (default) and h1 modes are untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>