私は奇妙な行動に直面しました。
マニュアルには、「2 つのソケットが同じポート番号にバインドされているが、明示的なインターフェイスが異なる場合、競合は発生しない」と記載されています。ステップ 3 で、次の場合にシステムが失敗するのはなぜですか? OSのバグですか?( Microsoft フォーラムへの私の投稿には回答がありません) これに関する回避策はありますか?
- ステップ 1. プロセス A は 127.0.1.1:88 (デフォルト) をバインドします — OK
- ステップ 2. プロセス B が 127.0.0.1:88 をバインドします (SO_REUSEADDR を使用) — OK
- ステップ 3. プロセス C は 127.0.0.1:88 をバインドします (SO_REUSEADDR を使用) — 失敗します (10013 WSAEACCES)
注: tcp ポートは同じですが、インターフェースは異なり、明示的です (ステップ 1 と 2-3 の間)。ユーザーは同じです。
この問題は、Windows Vista (32 ビット)、Windows Server 2008 (32 ビット)、Window Server 2008 R2 (64 ビット) などで発生します。
Windows XP では問題ありません。ステップ 3 は成功します。
更新: 参考までに、同じ問題: XP との Windows 7 ソケット バインド動作の違い、再利用アドレス ソケット オプション (WSAEACCES 10013 エラー)