【问题标题】:Socket send from client not failing when RST sent after FIN, ACK from server当 RST 在 FIN 后发送时,来自客户端的套接字发送没有失败,来自服务器的 ACK
【发布时间】:2011-06-16 19:50:33
【问题描述】:

这里的场景: 在 solaris 上运行 TCP 服务器,在 Linux 上运行 TCP 客户端。客户端连接并开始发送数据。客户端停止发送数据,并且在 N 秒不活动后,服务器发送一个 FIN、ACK(可能来自发送管道上的关闭调用)。客户端再次开始发送数据。服务器吓坏了,开始发送一堆没有设置其他标志的 RST 数据包。第一个数据包丢失,他们再次握手。发送永远不会返回错误,并且一个数据包会默默丢失。

任何想法为什么 RST 没有被传播到客户端?

【问题讨论】:

  • 客户端上的tcpdump + 客户端上的strace 将有助于诊断。根据您的描述,客户端似乎忽略了错误并在超时后重新连接。
  • 除非客户端再次调用connect(),否则内核不会再次握手。
  • 我没有看到发送错误并重新连接。但现在我是,所以我愿意承认错误,直到我发现不是这样。谢谢。
  • 这里没有证据表明 RST 没有传播到客户端。客户更有可能只是忽略了send() 错误。

标签: linux sockets tcp stream


【解决方案1】:

正在传播发送错误和重新连接。我的错。我猜盯着日志太久了。谢谢!

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2018-01-03
    • 2012-07-27
    • 2015-06-23
    • 2019-04-13
    • 2021-03-20
    相关资源
    最近更新 更多