ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于tcp心跳包的问题

2019-04-03 11:50:44  阅读:183  来源: 互联网

标签:int tcp TCP fd 关于 心跳 sizeof 超时 os


心跳包的原理 /* 转自网上参考资料*/
1客户端每隔一个时间间隔发生一个探测包给服务器,同时启动一个超时定时器
3服务器端接收到检测包,应该回应一个包
4如果客户端收到服务器的应答包,则说明服务器正常,停止超时定时器
5如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了

void sport_fd_keep_alive( int fd, int line , int os_fd)
{
    int option = 0; /*开启keepalive属性*/
    int keepInterval = 5;/*探测时发探测包的时间间隔为5秒*/
    int keepCount = 3;/*探测重试的次数. 全部超时则认定连接失效*/
     int keepIdle = sipLineTimeGet(line);/* 如果在单位时间(建议30s-60s)内没有任何数据交互,则进行探测*/
    if (os_fd)
    {   
            setsockopt (os_fd, IPPROTO_TCP, TCPTV_KEEP_IDLE, (char *) &keepIdle, sizeof (keepIdle));
            setsockopt (os_fd, IPPROTO_TCP, TCPTV_KEEPINTVL, (char *) &keepInterval, sizeof (keepInterval));
            setsockopt (os_fd, IPPROTO_TCP, TCPTV_KEEPCNT, (char *) &keepCount, sizeof (keepCount));
        setsockopt (os_fd, SOL_SOCKET, SO_KEEPALIVE, (char *) &option, sizeof (option));
    }

}

使用时需要#include <netinet/tcp.h>, 否则SOL_TCP和TCP_KEEPIDLE等3个宏找不到.

标签:int,tcp,TCP,fd,关于,心跳,sizeof,超时,os
来源: https://blog.csdn.net/baidu_41849426/article/details/88991368

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有