心跳检测,用oob实现

用select和msg_oob实现 心跳;

对于oob数据 ,默认情况下 [ 不开OOBINLINE]:  

他不在接受缓冲区, 而在另1个缓冲区中,这个缓冲区只有一个字节,因此不论客户端以MSB_OOB发送

N个字节的数据, 只有最后一个字节是OOB数据, 同理,因为只有一个字节的缓冲区,如果连续2次

发送msg_oob , 那么后一次将覆盖前一次, 最后OOB是tcp头中的一个URG指针,

需要注意的是 : 即使对方的滑动窗口是0,即无法接受数据了, OOB还是能发送过去[不伴随其他数据],

对于接受方来说, 只要知道有oob通知即可, 有没有数据以及是什么数据无所谓;因此,用oob来实现心跳,

还是比较方便的

 

下面代码只提供一个思路 , 只是简单的实现

客户端没实现完整, 基本思路跟服务器代码一致, 服务器代码也只接受了一个客户端,

但基本方式是一致的;

serv.cpp

#include <process.h>
#define MAX_HEART_COUNT 5  //心跳最大次数

//客户端数据
struct client_data
{
    SOCKET client_sock; //socket
    int heart_cnt; //心跳次数
};

volatile bool goon = true; //只是简单使用


//unix : mutex
CRITICAL_SECTION cs;

/*
    用于检测客户端心跳次数的线程
 *  每2秒循环一次,同时给每个heart_cnt + 1, 如果到了MAX_HEART_COUNT
 *  证明此客户端已经断线
*/
unsigned int heart_beat_thread(void  * param){
    cout << "heart beat thread 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值