我正在编写几个使用Boost.ASIO与网络通信的应用程序。由于错误,突然有两个人在配置中获得了相同的端口,并且他们都成功地开始在同一端口上侦听。这是来自netstat -na
输出
TCP 0.0.0.0:40000 0.0.0.0:0聆听
TCP 0.0.0.0:40000 0.0.0.0:0 LISTENING
怎么会这样?两个不同的应用程序正在使用同一个TCP端口!
答案 0 :(得分:2)
如果在Windows上使用标志SO_REUSEADDR打开套接字,则可以执行此操作。不幸的是,SO_REUSEADDR标志在Windows上的语义与在* nix上的语义不同,后者允许这种行为。
如果您担心其他应用可能会尝试侦听您正在使用的端口,则可以使用SO_EXCLUSIVEADDRUSE标志。如果您控制所有打开套接字的应用程序,请确保您没有使用SO_REUSEADDR标志。