我正在编写几个使用 Boost.ASIO 与网络通信的应用程序。突然,由于错误,他们两个在配置中获得了相同的端口,并且他们都成功开始监听同一端口。这是来自netstat -na
输出
TCP 0.0.0.0:40000 0.0.0.0:0 LISTENING
TCP 0.0.0.0:40000 0.0.0.0:0 LISTENING
怎么会这样呢?两个不同的应用程序正在使用同一个 TCP 端口!
最佳答案
如果套接字是使用标志 SO_REUSEADDR 打开的,则这是可能的在 Windows 上。不幸的是,SO_REUSEADDR 标志在 Windows 上与 *nix 上具有不同的语义,这允许这种行为。
如果您担心其他应用程序可能会尝试监听您正在使用的端口,则可以使用 SO_EXCLUSIVEADDRUSE 标志。如果您控制所有打开套接字的应用程序,请确保您没有使用 SO_REUSEADDR 标志。
关于c++ - 两个应用程序如何监听一个端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026460/