Youth 发表于 2009-3-3 16:48:25

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

服务端用ace做的,客户端是cbuilder里的indy组件做的,之间有tcp连接

刚才试验了一下,直接在任务管理器里面关闭客户端的进程,服务端相应连接的handle_close也会被调用,不管客户端和服务端是在同一台机器上还是局域网的另外一台机器上。这个的底层是啥机制?我一直以为的都是连接非法断开时另一端应该都是不知道的

winston 发表于 2009-3-3 18:29:03

有时候会,但有时候又不会。有时候中间的路由器崩溃了,程序都不会知道的。也一直以为链接存在。参见TCP网络协议的说明。

这个是靠不住的机制,一般用心跳包机制去保证线路是否可靠。

Youth 发表于 2009-3-4 14:54:55

收到,谢谢了:)fgh

winston 发表于 2009-3-4 16:57:59

你强行关闭程序,OS会代为关闭打开的SOCKET句柄,会发出FIN消息报。但对端可能收不到的。

cnhome 发表于 2009-3-17 10:01:49

深有感处

chendh 发表于 2009-5-8 16:19:33

客户端关闭, 服务端会收到read状态, 然后去read句柄, 会得到0 ,表示客户端断开了
页: [1]
查看完整版本: [求助] tcp连接被断开时handle_close总是会被调用的吗?