当积压已满时,为什么没有拒绝ServerSocket连接?

时间:2015-10-17 17:55:47

标签: java serversocket

无私的好奇心......

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

ServerSocket ss = new ServerSocket(4000, 1);

在shell中我运行

netcat localhost 4000
多次 - 到目前为止5次。

永远不会拒绝连接。 netcat的每个实例都在等待,直到我的ServerSocket被销毁。

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

我知道我可以通过关闭ServerSocket(然后在我准备就绪时打开另一个)来完成这项工作,但是......不管怎样它还不能用?

我误解了吗?

1 个答案:

答案 0 :(得分:1)

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

  

此行为取决于平台。当待办事项填满时,Windows会发出RST,从而导致“拒绝连接”。 Unix,Linux只丢弃SYN数据包。

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