我对使用 TCP 的应用程序的行为感到困惑。当 Internet 范围的 TCP 连接一端的应用程序在套接字上调用 close() 时,close() 返回。然而,在另一端,套接字上的 write() 并不表示 TCP 连接已关闭。AFAIK,这种行为与 TCP 规范不一致:主动 close() 不应该返回,除非它收到来自 TCP 连接另一端的确认(具体来说,主动端的 TCP 状态不能转换出来TIME_WAIT_1 除非它从另一端收到适当的响应——此时另一端的 write() 应该返回错误)。
当故障入侵防御系统 (IPS) 在 TCP 连接的两端之间时,我已经看到了这种行为。IPS 的制造商正在解决这个问题。
是否还有其他可能发生此行为的情况?
我的环境是 Unix、C、ONC RPC 和套接字。