为什么在积压已满时不拒绝 ServerSocket 连接?

Why aren't ServerSocket connections rejected when backlog is full?

无私的好奇心...

在 Java 我在一个套接字上监听,积压为 1:

ServerSocket ss = new ServerSocket(4000, 1);

在贝壳中 运行

netcat localhost 4000

很多次 - 到目前为止 5 次。

连接永远不会被拒绝。 netcat 的每个实例都坐着等待我的 ServerSocket 被销毁。

积压长度为 1 - 这意味着它应该只让一个传入连接排队,然后拒绝,不是吗? ((我不知道队列中是否包含第一个 - 现在不重要。))

我知道我可以通过关闭 ServerSocket 来完成这项工作(然后在我准备好时打开另一个),但是......它不应该工作吗?

我是不是理解错了?

正如我所写 here,上面引用的,

This behaviour is platform-dependent. Windows issues an RST when the backlog fills up, which results in 'connection refused'. Unix, Linux just drop the SYN packet.

NB Backlog长度不是1,平台可以上下调整。在早期的 BSD 版本中,历史上最小的最小积压长度为 5。现在有的平台是五十甚至五百