我正在开发的Mac OSX网络客户端有时连接到HTTPS端口时遇到问题。查看网络跟踪,我们看到:
T0.0 client:port -> server:443 SYN
T0.1 server:443 -> client:port SYN, ACK
T3.1 server:443 -> client:port SYN, ACK
T6.1 server:443 -> client:port RST
3秒的延迟与在失败的SYN/ACK上重试的TCP超时相匹配,因此这是预期的。但令人难以置信的是,客户从来没有用ACK或RST响应。当客户端再次尝试登录时,它将成功。这个问题在许多首次尝试连接时重复出现。这个程序还有其他的HTTPS连接在同一时间进行,在网络跟踪中看起来还不错。
我的怀疑是有一个竞争条件导致套接字有时被错误地管理。但到目前为止,除了受影响的客户机(这是一个非常庞大和复杂的软件),我无法在任何代码中重新创建它。甚至使用
nmap
和
hping3
为了手工制作数据包,客户端总是至少发送一个RST。
有没有办法(有意或无意地)在userland代码中配置这样的套接字,使其不响应SYN/ACK?