找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3583|回复: 5

[求助] tcp连接被断开时handle_close总是会被调用的吗?

[复制链接]
发表于 2009-3-3 16:48:25 | 显示全部楼层 |阅读模式
服务端用ace做的,客户端是cbuilder里的indy组件做的,之间有tcp连接

刚才试验了一下,直接在任务管理器里面关闭客户端的进程,服务端相应连接的handle_close也会被调用,不管客户端和服务端是在同一台机器上还是局域网的另外一台机器上。这个的底层是啥机制?我一直以为的都是连接非法断开时另一端应该都是不知道的
发表于 2009-3-3 18:29:03 | 显示全部楼层
有时候会,但有时候又不会。有时候中间的路由器崩溃了,程序都不会知道的。也一直以为链接存在。参见TCP网络协议的说明。

这个是靠不住的机制,一般用心跳包机制去保证线路是否可靠。
 楼主| 发表于 2009-3-4 14:54:55 | 显示全部楼层
收到,谢谢了:)fgh
发表于 2009-3-4 16:57:59 | 显示全部楼层
你强行关闭程序,OS会代为关闭打开的SOCKET句柄,会发出FIN消息报。但对端可能收不到的。
发表于 2009-3-17 10:01:49 | 显示全部楼层
深有感处
发表于 2009-5-8 16:19:33 | 显示全部楼层
客户端关闭, 服务端会收到read状态, 然后去read句柄, 会得到0 ,  表示客户端断开了
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 03:48 , Processed in 0.014596 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表