最近在做一个CS项目,需要用到心跳包去检测网络断开等问题
我使用了TCP自带的KEEPALIVE机制,也设置了间隔时间和重发时间
服务器也能检测到网络断开(使用recv阻塞返回-1及WSAGetLastError取得)
我不敢用select,因为我发现select可以检测到FIN包,所以我估计也能检测到对方自动回复的心跳包应答。
目前有个问题,如果用RECV阻塞,是否能够接收到对端返回的心跳应答??
如果能收到那咋整啊?
如果收不到就好办了!!
在线等 谢谢啊 !
我使用了TCP自带的KEEPALIVE机制,也设置了间隔时间和重发时间
服务器也能检测到网络断开(使用recv阻塞返回-1及WSAGetLastError取得)
我不敢用select,因为我发现select可以检测到FIN包,所以我估计也能检测到对方自动回复的心跳包应答。
目前有个问题,如果用RECV阻塞,是否能够接收到对端返回的心跳应答??
如果能收到那咋整啊?
如果收不到就好办了!!
在线等 谢谢啊 !
解决方案 »
- 关于ONCOMM的问题
- vc2003(7.1)项目属性好多,在哪儿为exe指定dll查找路径?
- CListCtrl控件嵌入编辑控件CEdit,实现CListCtrl编辑功能遇到的问题。
- 将filezilla断点续传部分抽取出来作成一个DLL
- 请问怎么实现对浏览器内的表单元素进行操作?
- 如何让个图象列表的列表项上的文字能自己修改啊?
- 急——谁能告诉我用c语句怎么调自己的dll中得方法
- 请教矩阵问题
- 在VC++里用WINSOCK控件?
- S.0.S 紧急呼救,大虾出手!请问怎么恢复硬盘下快速格式化后的数据!!! 问题解决,分数全送。
- createfilemapping返回122,请教。
- 最近学串口编程,给推荐一本相关方面的书,sknaht!
用select、send、recv等函数,返回值为0或-1时,查看错误值
因为我发现对端使用closesocket发送FIN包时,本端select可以检测到,并且使用recv得到返回值是0
recv这个返回值应该意思是FIN包的数据部分是空的
我猜对端的心跳回复应该也能select收到,那处理起来就麻烦了
recv返回是0不能确定是什么情况 啊
因为我曾经记得好像哪本书上还是什么上曾提过一般是读得那端closesocket或者shutdown才收到fin包的吧?
select返回值没有关于keepalive的
recv send有 我不知道自己看法对不对:
select就是用来检测链路上的所有包,包括FIN包,心跳包,各种空包及数据包,只要有就返回,然后用recv(我总觉得recv在select下阻塞与非阻塞没啥区别,因为select返回正常的话就表明有读或写,RECV阻塞函数也不会阻塞,就是觉得加了select 就不用设置阻塞了) recv取的是报文的数据部分,FIN包就是空包,心跳包应该也是这个时候怎么区分来的是心跳应答还是FIN包呢??
我是最近在看计算机网络,TCP结束的时候会进行两次握手 分别断开两个方向的链路连接
如果要结束时,一端发送空包,包头FIN置1;一端接收到FIN包后,回复ACK也就是说我调用select检测链路的可读性的时候,对端发送的FIN包我这面受到了,并RECV后是0.
你好 我想了解的是:
本端select能够检测到心跳ACK包吗?如果本端发送心跳包
本端select能够检测到心跳包吗?如果对端发送心跳包
本端select能够检测到心跳ACK包吗?如果本端发送心跳包
本端select能够检测到心跳包吗?如果对端发送心跳包