用SIO_KEEPALIVE_VALS做心跳检测是不是不靠谱?

mxzy55560593 2012-12-13 07:17:55
我用SIO_KEEPALIVE_VALS做心跳检测,5秒一次,频率时间是1秒
我的理解是:当客户端异常断开,投递到这个客户端wsarecv会在GetQueuedCompletionStatus自动返回
但我实际测试是:在客户端异常断开的情况下,很多wsarecv都没在GetQueuedCompletionStatus返回

检查了一天的程序了,还是不确定到底是我程序的问题还是这个机制的问题

希望用这个东西做过实际项目的谈谈这种心跳可行不 谢谢啦
...全文
583 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2012-12-14
  • 打赏
  • 举报
回复
KEEPALIVE有有效时间是几十分钟的,,所以还是得自己实现心跳包
Squall_zy 2012-12-14
  • 打赏
  • 举报
回复
给你我的一点心得。 4、关于心跳信号。心跳,也称之为TCP保活定时器,是为了检测TCP链路的连接状态的。可惜保活并不是TCP规范中的一部分。套接字本身是有一套心跳保活机制的,不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后,并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。很多人认为两个小时的时间设置得很不合理。为什么不设置成为10分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机制只是操作系统底层使用的一个被动机制,原理上不应该被上层应用层使用。当系统关闭一个由KEEPALIVE机制检查出来的死连接时,是不会主动通知上层应用的,只有在调用相应的IO操作在返回值中检查出来。因此,忘记SO_KEEPALIVE,在应用层自己写一套保活机制比较靠谱(自己来设计心跳信号吧)。
bsnry 2012-12-14
  • 打赏
  • 举报
回复
引用 3 楼 fishion 的回复:
KEEPALIVE有有效时间是几十分钟的,,所以还是得自己实现心跳包
好像可以修改, 用的多还是自己搞的心跳包
Eleven 2012-12-13
  • 打赏
  • 举报
回复
自己实现心跳机制吧~
看不见的裂痕 2012-12-13
  • 打赏
  • 举报
回复
知道这东西,不过还是用自主心跳包,开定时器,一般超过3次超时就自动断网。 好控制
内容概要:本文详细介绍了Anaconda的下载、安装与配置方法(2025最新版)。Anaconda是一个开源的Python/R数据科学集成开发平台,预装了1500多个科学计算库,并提供conda包管理和环境管理功能。文章首先列出了系统要求,接着分别讲述了适用于不同操作系统的下载方式,包括官方下载和国内镜像下载。然后,具体讲解了Windows、macOS和Linux三种操作系统的安装步骤,以及环境变量的手动配置方法。此外,还提供了验证安装是否成功的命令和配置国内镜像源的方法,以提高下载速度。最后,列出了一些常用conda命令和常见问题的解决方案。 适合人群:从事数据科学、机器学习领域的研究人员和开发者,特别是需要频繁使用Python科学计算库的用户。 使用场景及目标:①帮助用户快速搭建Python开发环境,尤其是需要多个Python版本共存或隔离环境的情况下;②解决因网络原因导致的下载速度慢的问题;③提供详细的安装指南,确保安装过程顺利进行;④指导用户正确配置环境变量,避免常见的安装后无法使用的错误。 阅读建议:由于Anaconda涉及多平台安装和配置,建议读者根据自己的操作系统选择相应的章节重点阅读,并严格按照步骤操作。对于初次使用者,建议先从简单的安装入手,再逐步学习环境管理和包管理的相关命令。

18,363

社区成员

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

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