【发布时间】:2013-11-20 10:14:48
【问题描述】:
我们的 (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, Socket, etimedout}。
我想知道,会不会是由gen_tcp:send(...) 操作触发的?然后我发现这是不可能的,因为发送操作都是同步的,它们会立即失败。
那么,我的问题是,etimedout 消息是从哪里来的?或者是什么触发了它?我在 Erlang VM 的 C 源代码上搞砸了,尤其是 inet_drv.c,但还没有结论。
谢谢。
【问题讨论】:
标签: linux sockets networking erlang