Tcp服务端检测到连接断开,如何判断是对端崩溃掉线,还是中间路由断线(或对端主机断电等)?

小_鱼 2017-12-29 02:52:11
前几天某某云机房跨国网络调整,有断网操作。我们的服务器居然能检测到网络断开。。(recv返回-1,错误码WSAECONNRESET。没有加心跳包)

按照我的理解,tcp连接中间的网络断开,server和client都应该检测不到的呀


这就比较尴尬了,我们是IM服务,IM server检测到网络端开需要判断是中间网络断开(本想通过应用层心跳包判断),还是client端(IM 代理节点)崩溃。

中间网络断开:IM server上来自IM代理节点上的用户信息不会立即删除,等待IM代理节点重连。同时连接在IM代理节点上的用户将不会感知到网络断开。

IM代理节点崩溃:IM server将清除该代理节点上相关信息。同时连接在IM代理节点上的用户将会感知到。
...全文
1074 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小岗哥哥 2020-03-12
  • 打赏
  • 举报
回复
为什么不会通知你?tcp四次握手 会发个rst给你,除非是对侧不关闭客户端,直接拔网线或同等操作。
xiaopi224 2018-03-11
  • 打赏
  • 举报
回复
这玩意就跟在哪拔网线一样,在client拔跟在中间节点拔是一样的吧。除非中间网络断开的时候先通知你。

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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