我在 CentOs 上运行基于 Java 的系统,有时我发现服务客户端会在短时间内遇到“连接被拒绝”错误。有趣的是,服务器同时还在处理请求。错误是间歇性的。
侦听器套接字的积压是否可能在短时间内填满并导致新请求被拒绝?我已经没有线索了,到目前为止,我无法在持续集成系统之外重现这种情况。
答案1
我认为你的猜测是正确的,man listen(2)
说(重点是我的):
backlog 参数定义 sockfd 的待处理连接队列可以增长的最大长度。如果在队列已满时连接请求到达,客户端可能会收到指示 ECONNREFUSED 的错误或者,如果底层协议支持重传,则可以忽略该请求,以便稍后重新尝试连接成功。