【问题标题】:Why does tomcat receive request when multiple processes listen to the port?为什么tomcat在多个进程监听端口时会收到请求?
【发布时间】: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


【解决方案1】:

我可以从用户 nos 回答我的other 问题时提出的问题来回答这个问题。

我意识到,由于我在测试中使用了wget http://localhost:8080,所以它使用了只有tomcat 监听的IPv6

当我将其更改为 http://127.0.0.1:8080 时,我看到了完全不同的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 2014-04-19
    • 2010-09-10
    • 2021-10-08
    • 2019-09-29
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多