请教高手FD_CLOSE问题

Squall_zy 2010-06-09 05:06:06
程序使用AsyncSelect、或EventSelect时,注册 FD_CLOSE 事件。
请问:当 FD_CLOSE 被触发时,如何区分 CLOSE_WAIT 状态和 TIME_WAIT 状态?必须从应用层区分么?
...全文
328 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Squall_zy 2010-06-14
  • 打赏
  • 举报
回复
再顶。。。。。
Squall_zy 2010-06-11
  • 打赏
  • 举报
回复
感谢 VisualEleven,但你的文章还是没有回答我的问题。
我的最终目的是收到FD_CLOSE时,能够区分我是主动关闭一方还是被动关闭一方。
要是有能够检测出当前状态的API就好了。

另外,你文章里说的那种锁在CLOSE_WAIT状态的原因,肯定是服务器收到客户发来的FIN时,强行关闭了socket(估计是l_onoff=1,l_linger=0造成的),这时没机会回发第二个FIN了,被锁在CLOSE_WAIT。
其实使用默认的closesocket就好,因为默认方式是优雅关闭,关闭过程在后台执行了。
Squall_zy 2010-06-10
  • 打赏
  • 举报
回复
to mayudong1:

The FD_CLOSE network event is recorded when a close indication is received for the virtual circuit corresponding to the socket. In TCP terms, this means that the FD_CLOSE is recorded when the connection goes into the TIME WAIT or CLOSE WAIT states. This results from the remote end performing a shutdown on the send side or a closesocket.

半关闭时,两边都会收到 FD_CLOSE.
mayudong1 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 socoola 的回复:]
主动关闭的时候才会出现TIME_WAIT状态,被动关闭才会出现CLOSE_WAIT状态,接收到FD_CLOSES事件表明是被动关闭
[/Quote]
Squall_zy 2010-06-10
  • 打赏
  • 举报
回复
有高手作答么?
再顶下,我的意思是如何区分主的关闭与被动关闭,必须应用层自己做记录么?
socoola 2010-06-10
  • 打赏
  • 举报
回复
主动关闭的时候才会出现TIME_WAIT状态,被动关闭才会出现CLOSE_WAIT状态,接收到FD_CLOSES事件表明是被动关闭
mayudong1 2010-06-10
  • 打赏
  • 举报
回复
TIME_WAIT 状态时主动关闭的时候才出现的吧
Squall_zy 2010-06-10
  • 打赏
  • 举报
回复
自己顶下。
lijianli9 2010-06-09
  • 打赏
  • 举报
回复
不懂,帮你顶吧,期待高手!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧