Java 为什么不';当待办事项已满时,服务器套接字连接被拒绝?

Java 为什么不';当待办事项已满时,服务器套接字连接被拒绝?,java,serversocket,Java,Serversocket,无私的好奇心 在Java中,我在一个套接字上侦听,积压1: ServerSocket ss = new ServerSocket(4000, 1); 我在贝壳里奔跑 netcat localhost 4000 到目前为止已经有5次了 连接从不被拒绝。netcat的每个实例都会坐在那里等待,直到我的ServerSocket被销毁 Backlog长度是1-这意味着它应该只让一个传入连接排队,然后拒绝,不是吗?((我不知道队列是否包括第一个队列-现在不重要。) 我知道我可以通过关闭ServerSo

无私的好奇心

在Java中,我在一个套接字上侦听,积压1:

ServerSocket ss = new ServerSocket(4000, 1);
我在贝壳里奔跑

netcat localhost 4000
到目前为止已经有5次了

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

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

我知道我可以通过关闭ServerSocket(准备好后再打开另一个)来实现这一点,但是。。。不管怎样,它不应该工作吗

我误解了吗?

正如我在上面引用的那样


这种行为依赖于平台。当积压工作填满时,Windows会发出RST,这会导致“连接被拒绝”。Unix、Linux只需删除SYN数据包


NB待办事项长度不是1。平台可以上下调整。在早期的BSD版本中,历史上最小的待办事项长度是5。在某些平台上,它现在是50甚至500。

这种行为取决于平台。当积压工作填满时,Windows会发出RST,这会导致“连接被拒绝”。Unix、Linux只需删除SYN数据包。如果您在Linux上运行,请阅读此内容。如果您发送了一些信息,netcat可能会在几分钟后超时,否则它会认为连接已建立。(或者在溢出时尝试echo 1>/proc/sys/net/ipv4/tcp\u abort\u)谢谢。如果这是一个答案,我会接受其中一个:——)