无私的好奇心...
在 Java 中,我监听一个套接字,积压为 1:
ServerSocket ss = new ServerSocket(4000, 1);
我在壳里跑
netcat localhost 4000
很多次 - 到目前为止 5 次。
连接永远不会被拒绝。每个实例netcat
坐着等待,直到我的 ServerSocket 被销毁。
Backlog 长度为 1 - 这意味着它应该只让一个传入连接排队,然后拒绝,不是吗? ((我不知道队列是否包含第一个 - 现在不重要。))
我知道我可以通过关闭 ServerSocket (然后在准备好时打开另一个)来完成这项工作,但是......它不应该工作吗?
难道我理解错了?
正如我所写here,上面引用的,
此行为依赖于平台。当积压已满时,Windows 会发出 RST,从而导致“连接被拒绝”。 Unix、Linux 只是丢弃 SYN 数据包。
注意:Backlog 长度不是 1。平台可以向上或向下调整。在早期的 BSD 版本中,历史上最小的积压长度是 5。现在在某些平台上是五十甚至五百。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)