为什么epoll_wait(),在5s~10s内返回并且TCP连接超时

发布于 2024-12-23 01:28:49 字数 423 浏览 0 评论 0原文

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

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

当我的客户端发送 SYN 以便连接到服务器时。但服务器无法在5秒到10秒内发回ACK。然后epoll_wait返回。并检查SO_ERROR。我收到一个 EIMTEDOUT

我只是不明白为什么超时时间这么短,只有5到10秒。是我客户端的问题还是epoll的问题?

I create a non-blocking socket, and then use the epoll to manange the socket. I do not set a timeout on epoll_wait. But I find that the epoll returned in 5s to 10s, then I check with the getsockopt on SO_ERROR, the connect find to be timed out. Why time out in so short time?

I try to use tools to cap the TCP packages. The scenario is like this:

When my client send a SYN in order to connect to the server. But the server cannot send back the ACK in 5s to 10s. Then the epoll_wait return. and check with the SO_ERROR. I get a EIMTEDOUT.

I just cannot understand why the timeout time is so short in 5s to 10s. Is the problem of my client or is the epoll?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何以笙箫默 2024-12-30 01:28:49

我最近发布了一个类似的 问题 查看已接受的答案,其中解释了 TCP 如何连接超时值是由linux内核计算的。如果你碰巧在同一台机器上有客户端/服务器,那么它很可能有更短的超时值。如果您预计服务器需要更长的时间来接受连接,您可能需要自己显式设置超时值。

I posted a similar question recently See the accepted answer which explains how the TCP connect timeout value is calculated by the linux kernel.. If you happen to have the client/server on the same machine its quite likely to have shorter timeout values. If you expect server to take longer than that to accept a connection you might want to set the timeout value yourself explicitly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文