【发布时间】:2010-10-18 22:36:21
【问题描述】:
情况:服务器调用listen()(但不是accept()!)。客户端向服务器发送一个 SYN。服务器获取 SYN,然后将 SYN/ACK 发送回客户端。但是,客户端现在挂起/死亡,因此它永远不会向服务器发送回 ACK。连接处于 SYN_SENT 状态。
现在另一个客户端发送一个 SYN,从服务器获取一个 SYN/ACK,然后发回一个 ACK。此连接现在处于 ESTABLISHED 状态。
现在服务器终于调用了accept()。发生什么了?在出现某种超时之前,accept() 是否会阻塞第一个错误连接?它是否首先检查队列中是否存在任何已建立的连接并返回这些连接?
【问题讨论】:
-
当服务器获得 SYN 并返回 SYN/ACK 时,连接(从服务器角度)处于 SYN_RCVD 状态。是客户端处于 SYN_SENT 状态,与讨论无关。
-
不,服务器发送 SYN/ACK 后,也是在 SYN_SENT 中。
-
哦,抱歉 - 看来您是对的。我可能需要修复我的代码 - 谢谢!
标签: language-agnostic sockets network-programming tcp