Leadaxe 澄清 LxBox 的 disabled UDP GSO 日志并不是发送失败

在 AWG 连接失败的排查中,作者指出日志里的 disabled UDP GSO on 0.0.0.0:36771 不是发送失败:该套接字在第一个 GSO 批次上遇到 EIO,于是关闭 GSO 并在返回前把同一个包重发一次,这条信息每个套接字只输出一次;握手路径之所以把它记成 ERROR,只是因为它没有像数据路径那样解开重试标记,这一点之后会被调低日志级别,但它并不是连接不上该节点的原因。他判断真正的失败发生在这行日志之后,并请对方贴出后续日志:是否出现 Received handshake response 或 Sending keepalive、该行是否重复、该节点是否配置了 detour(有 detour 时根本不走这条套接字路径,这与「只差一跳 cf 时能连通」吻合)、构建号与 Android 版本,并在 2.25.3(内核 lx.10:AWG 3.1、修复了域名端点的握手)上复测。他说明该版本没有针对 GSO 的改动,但周边环境差异足够大。

作者原文

Read the line carefully. disabled UDP GSO on 0.0.0.0:36771 is not a send failure: the socket hit EIO on its first GSO batch, switched GSO off and re-sent the same packet without it before returning. The message is emitted once per socket, and the handshake path logs it at ERROR only because it does not unwrap the retry marker the way the data path does. That will be quieted, but it is not what keeps you off Proton.

The actual failure is somewhere after that line. Post the log after it: whether Received handshake response or Sending keepalive ever appears, whether the line repeats, whether the node has a detour (with a detour this socket path is not used at all, which matches "one cf hop away works"), the build number and Android version. Repeat on 2.25.3 (core lx.10: AWG 3.1, fixed handshakes for domain endpoints); there is no targeted GSO change in it, but the surroundings differ enough.