Boost.ASIO を使用してネットワークと通信するいくつかのアプリを作成しています。突然、間違いのために 2 人が設定で同じポートを取得し、両方とも同じポートでリッスンを開始しました。ここにnetstat -na
出力があります
TCP 0.0.0.0:40000 0.0.0.0:0 リッスン
TCP 0.0.0.0:40000 0.0.0.0:0 リッスン
どうしてそうなるの?2 つの異なるアプリが 1 つの同じ TCP ポートを使用しています。
Boost.ASIO を使用してネットワークと通信するいくつかのアプリを作成しています。突然、間違いのために 2 人が設定で同じポートを取得し、両方とも同じポートでリッスンを開始しました。ここにnetstat -na
出力があります
TCP 0.0.0.0:40000 0.0.0.0:0 リッスン
TCP 0.0.0.0:40000 0.0.0.0:0 リッスン
どうしてそうなるの?2 つの異なるアプリが 1 つの同じ TCP ポートを使用しています。
これは、WindowsでフラグSO_REUSEADDRを使用してソケットが開かれた場合に可能です。残念ながら、SO_REUSEADDR フラグは、Windows と *nix ではセマンティクスが異なるため、この動作が可能になります。
使用しているポートで別のアプリがリッスンしようとするのではないかと心配している場合は、SO_EXCLUSIVEADDRUSE フラグを使用できます。ソケットを開くすべてのアプリを制御している場合は、SO_REUSEADDR フラグを使用していないことを確認してください。