【问题标题】:Why epoll_wait(), get returned and TCP connect time out in 5s~10s为什么epoll_wait(),5s~10s返回,TCP连接超时
【发布时间】:2012-01-28 00:18:15
【问题描述】:

我创建了一个非阻塞套接字,然后使用epoll 来管理套接字。我没有在epoll_wait 上设置超时。但是我发现epoll在5s到10s内返回,然后我在SO_ERROR上检查getsockopt,连接发现超时。为什么这么短的时间就超时了?

我尝试使用工具来限制 TCP 包。场景是这样的:

当我的客户端发送SYN 以连接到服务器时。但是服务器无法在 5s 到 10s 内发回ACK。然后epoll_wait 返回。并与SO_ERROR 联系。我收到了EIMTEDOUT。

我只是不明白为什么超时时间在 5s 到 10s 之间如此之短。是我客户的问题还是epoll?

【问题讨论】:

  • +1 - 5-10 秒对于连接超时来说确实非常短。例如,如果链接包含拨号调制解调器,则连接总是会因超时而失败。我也想知道为什么会这样。
  • 我不知道为什么。我只是使用libev。上面的描述正是 libev 在 C++ 中所做的。我只是发现 libev 在这么短的时间内返回 ETIMEDOUT。

标签: linux tcp network-programming tcpclient epoll


【解决方案1】:

我最近发布了一个类似的question 查看接受的答案,它解释了 linux 内核如何计算 TCP 连接超时值。如果您碰巧在同一台机器上拥有客户端/服务器,它很可能有更短的时间超时值。如果您希望服务器接受连接的时间比接受连接的时间长,您可能需要自己明确设置超时值。

【讨论】:

  • 谢谢。我克服了它。作为您的问题,TCP 超时值是由内核动态计算的。
猜你喜欢
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多