加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 活动套接字的#39;{tcp_error,Socket,etimedout}’消息

发布时间:2020-12-24 07:45:17 所属栏目:Linux 来源:网络整理
导读:我们的( Linux)服务器使用选项{active,once}和它的套接字,并且弹出了{tcp_error,Socket,etimedout}消息.我知道这可能是由糟糕的网络状况引起的,但有一些奇怪的事情. 在我们的机器上系统范围内启用了TCP keepalive,实际选项值为: net.ipv4.tcp_keepalive_tim

我们的( Linux)服务器使用选项{active,once}和它的套接字,并且弹出了{tcp_error,Socket,etimedout}消息.我知道这可能是由糟糕的网络状况引起的,但有一些奇怪的事情.

在我们的机器上系统范围内启用了TCP keepalive,实际选项值为:

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

我相信这意味着套接字会在至少20分钟内超时.但奇怪的是,我们的进程在不到10秒的时间内就收到了{tcp_error,etimedout}.

我想知道,它是由gen_tcp:send(…)操作触发的吗?然后我发现这是不可能的,因为发送操作都是同步的,它们会立即失败.

所以,我的问题是,etimedout消息来自哪里?或是什么引发了它?我围绕着Erlang VM的C源代码,尤其是inet_drv.c,但还没有结论.

谢谢.

解决方法

tcpdump捕获显示它是TCP重新传输的超时事件.

我们的服务器机器将/ proc / sys / net / ipv4 / tcp_retries2设置为5,这将导致5次重传断开,而此值在开发者计算机上默认为15,因此我们无法在本地重现该问题.

从gen_tcp返回:send(…)(或其他语言中的等效API)仅表示TCP堆栈接受该数据包,但无法保证它可以到达对等体,并且当您遇到错误时可能会出错阻止其他操作.

找到了有关TCP重传here的一些简要说明.

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读