howtolearnc 2023-12-22 14:57 采纳率: 33.3%
浏览 38
已结题

tcp连接丢失,但是recv无异常

linux环境tcp连接丢失,但是recv无异常
在linux环境下使用netstat -an|grep tcp,查看当前与10.51.5.10地址的tcp连接已消失

img

但是程序中对该连接调用recv函数没有报错。代码如图,一直没有走到画线的这个分支里。还能对该套接字进行send,只是一直是发送失败状态。

img

2个多小时之后,才进入划线分支,recv返回值为0,errno为107。

img

请问这个情况是什么原因导致的,代码层面能不能缩短进入上述分支的时间呢。目前没有设置keepalive,如果设置了行不行呢。

  • 写回答

2条回答 默认 最新

  • howtolearnc 2024-01-28 10:02
    关注

    问题原因已找到。由于recv函数没500ms执行一次,一次接收512字节,但是对方每秒发送数据大于1024字节,导致数据处理不完,未处理的数据都暂时存放到了系统维护的tcp接收缓存里去了。然后当tcp连接意外断开时由于接收缓存里还有数据,所有recv函数还是能正常接收到数据的,但是send已经发不出去数据。我的解决方法就是提高接收数据的处理能力,这样当连接断开时就可以通过recv函数检测到了,然后重新建立一个新的连接。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月5日
  • 已采纳回答 1月28日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密