当前位置: 首页 > news >正文

TCP KeepAlive判断离线的记录

问题描述:

出现过建立TCP连接的目标设备离线以后,这边检测不到离线,导致出现逻辑错误。


原因分析:

原因就是没有设置TCP KeepAlive的保活机制,因为默认情况下这个是关闭的。


解决方案:

在创建套接字以后,通过设置SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT来判断是否离线

int on = 1;
if (setsockopt(socktmp, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on)) < 0) {BLOG_ERROR(fmt::format("SO_KEEPALIVE failed {}:{}", m_addr, m_addr_port));
}int keepIdle = 2; // 2秒无活动后开始探测
int keepIntvl = 3;  // 探测间隔3秒
int keepCnt = 3;    // 最多探测3次
if (setsockopt(socktmp, IPPROTO_TCP, TCP_KEEPIDLE, (char*)&keepIdle, sizeof(keepIdle)) < 0) {BLOG_ERROR(fmt::format("TCP_KEEPIDLE failed {}:{}", m_addr, m_addr_port));
}
if (setsockopt(socktmp, IPPROTO_TCP, TCP_KEEPINTVL, (char*)&keepIntvl, sizeof(keepIntvl)) < 0) {BLOG_ERROR(fmt::format("TCP_KEEPINTVL {}:{}", m_addr, m_addr_port));
}
if (setsockopt(socktmp, IPPROTO_TCP, TCP_KEEPCNT, (char*)&keepCnt, sizeof(keepCnt)) < 0) {BLOG_ERROR(fmt::format("TCP_KEEPCNT {}:{}", m_addr, m_addr_port));
}

http://www.dtcms.com/a/391336.html

相关文章:

  • Ceph 测试环境 PG_BACKFILL_FULL
  • 维星AI的GEO搜索优化:企业在AI时代的可见度突围之道
  • Abp Vnext 数据库由SQL server切换MySQL
  • Linux嵌入式自学笔记(基于野火EBF6ULL):4.gcc
  • Mellanox网卡寄存器PPCC
  • [vibe code追踪] 应用状态管理 | 交互式点击 | 共享白板
  • SG-TCP232-110 单通道串口服务器,一键实现串口与以太网双向转换
  • 零基础入门神经网络:从数学公式到通俗理解
  • 坤驰科技诚邀您参加——第十三届中国光纤传大会
  • 如何找到高质量的Java项目教程?
  • 无声的战场:AUTOSAR AP日志里的谍影重重(1)
  • ThinkPHP在使用nginx反向代理后如何获取真实的Ip地址
  • LeetCode 分类刷题:2439. 最小化数组中的最大值
  • Git最佳实践(Golang示例项目)
  • 20250919在荣品RD-RK3588-MID开发板的Android13系统下使用TF卡刷机解决竖屏横用的时候的竖屏提示的问题
  • Makefile学习(三)- CFLAGS和LDFLAGS
  • React 新闻发布系统 NewSandBox侧边栏与顶部栏布局
  • ppt视频极致压缩参数
  • 49.Mysql多实例部署
  • java 上传文件和下载/预览文件 包括音频调进度条
  • 部署你的 Next.js 应用:Vercel、Netlify 和自托管选项
  • 从产品经理视角:小智AI的产品介绍与分析
  • 解决:导包红色波浪线但正常运行及其后续问题
  • webrtc弱网-LinkCapacityEstimator类源码分析与算法原理
  • vue el-autocomplete输入框自动匹配优化,建议项按高度相似降序
  • 十分钟了解@Version注解
  • vue3+ts+uniapp H5微信小程序app有截止日期的日期date-pcicker组件
  • 设计模式-观察者模式详解
  • centos7--安装海量数据库Vastbase M100
  • Apache Commons DBCP连接池生产环境配置推荐