【发布时间】:2016-01-16 08:18:16
【问题描述】:
无私的好奇...
在 Java 中,我在一个套接字上侦听,积压为 1:
ServerSocket ss = new ServerSocket(4000, 1);
我在 shell 中运行
netcat localhost 4000
很多次 - 到目前为止 5 次。
连接永远不会被拒绝。 netcat 的每个实例都会等待,直到我的 ServerSocket 被销毁。
积压长度为 1 - 这意味着它应该只让一个传入连接排队,然后拒绝,不是吗? (((我不知道队列是否包括第一个 - 现在不重要。))
我知道我可以通过关闭 ServerSocket 来完成这项工作(然后在我准备好时打开另一个),但是......它不应该工作吗?
我理解错了吗?
【问题讨论】:
-
此行为取决于平台。当积压填满时,Windows 会发出 RST,这会导致“连接被拒绝”。 Unix、Linux 只是丢弃 SYN 数据包。
-
如果您在 linux 上运行,请阅读veithen.github.io/2014/01/01/…。如果您在其上发送内容,netcat 可能会在几分钟后超时,否则它会认为连接已建立。 (或尝试
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow) -
谢谢。如果这是一个答案,我会接受其中一个:-)
标签: java serversocket