#904·gost

sni 处理程序:连接在 15 秒后被丢弃(对整个会话应用 readTimeout 截止时间)

作者: mad创建于 2026年9月11日更新于 2026年9月12日

版本: gost 3.3.0 (go-gost/x, commit 4d4690b) 复现: gost -L=sni://:443 -F=ss://aes-256-gcm:pass@upstream:10098 通过 SNI 代理的任何 TCP 连接,如果持续时间超过 15 秒,就会被重置,即使有活动流量。 原因: commit 4d4690b 将读取截止时间重置到 `defer` 中,因此在嗅探之前设置的 15 秒读取超时截止时间现在在整个会话中都保留在客户端连接上。 xnet.Pipe 读取失败,出现 os.ErrDeadlineExceeded 错误,时间为 T0+15 秒。 注意: handler/forward 也存在相同的问题,并在 722dde5 中被修复("以防止 15 秒下载中止"),通过将 readTimeout 分离到 idleTimeout 中来解决。 sni 遗漏了。 预期: 截止时间仅限于客户端 Hello 嗅探阶段(与 commit 4d4690b 之前相同),或者 readTimeout <= 0 真正禁用超时。 解决方法: -L "sni://:443?readTimeout=87600h"