为什么epoll_wait(),在5s~10s内返回并且TCP连接超时
我创建一个非阻塞套接字,然后使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最近发布了一个类似的 问题 查看已接受的答案,其中解释了 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.