【2019-01-22】【转】服务器中判断客户端socket断开连接的方法

发布时间:2026/9/16 15:58:24
【2019-01-22】【转】服务器中判断客户端socket断开连接的方法 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2019-01-22 标题【转】服务器中判断客户端socket断开连接的方法分类操作系统 / linux 标签CC·socket服务器中判断客户端socket断开连接的方法本文转至【 https://www.cnblogs.com/jacklikedogs/p/3976208.html 】有删改。判断连接断开的方法法一当recv()返回值小于等于0时socket连接断开。但是还需要判断 errno是否等于 EINTR如果errno EINTR 则说明recv函数是由于程序接收到信号后返回的socket连接还是正常的不应close掉socket连接。法二struct tcp_info info;int lensizeof(info);getsockopt(sock IPPROTO_TCP TCP_INFO info (socklen_t *)len);if((info.tcpi_stateTCP_ESTABLISHED)) 则说明未断开 else 断开法三若使用了select等系统函数若远端断开则select返回1recv返回0则断开。其他注意事项同法一。法四int keepAlive 1; // 开启keepalive属性int keepIdle 60; // 如该连接在60秒内没有任何数据往来则进行探测int keepInterval 5; // 探测时发包的时间间隔为5 秒int keepCount 3; // 探测尝试的次数.如果第1次探测包就收到响应了则后2次的不再发.setsockopt(rs SOL_SOCKET SO_KEEPALIVE (void *)keepAlive sizeof(keepAlive));setsockopt(rs SOL_TCP TCP_KEEPIDLE (void*)keepIdle sizeof(keepIdle));setsockopt(rs SOL_TCP TCP_KEEPINTVL (void *)keepInterval sizeof(keepInterval));setsockopt(rs SOL_TCP TCP_KEEPCNT (void *)keepCount sizeof(keepCount));设置后若断开则在使用该socket读写时立即失败并返回ETIMEDOUT错误法五自己实现一个心跳检测一定时间内未收到自定义的心跳包则标记为已断开。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询