【发布时间】:2014-01-28 13:31:59
【问题描述】:
我最近在 Windows 上发现了 SO_REUSEADDR;那个tomcat通过default使用它。
我做了一个小测试来了解当另一个进程也在监听同一个端口时会发生什么。我的另一个过程是netcat。结果令人惊讶:
- 无论我是先启动
nc(netcat) 还是先启动tomcat,如果来自tomcat 的响应 - 如果我用它的
bin/tomcat.bat停止tomcat,它也会杀死nc进程 - 如果我通过终止进程来停止 tomcat,那么 nc 就能够响应下一个连接
这是什么魔法? tomcat 怎么总是能够抓取传入的请求?这是(即使其他进程正在侦听,tomcat 也会为所有连接提供服务)保证行为?我无法想象如何保证,但想问问。
【问题讨论】:
-
这是 Windows 在允许进程共享 TCP 端口时所做的任何事情的魔力。我无法在 MSDN 中的任何地方找到准确定义的语义,只能找到可能的语句。目的也逃不过我。
-
@EJP 我喜欢这个answer 的目的。
-
这就是 SO_REUSEADDR 的目的。这不是允许多个进程在 Windows 上共享同一个端口的目的。 Unix等不允许。这一点让我无法理解。
-
@EJP 你的意思是this thing?
-
您阅读过ServerSocket 文档吗?
标签: java apache sockets tomcat tomcat7