同じマシン上の 2 つのアプリケーションを同じポートと IP アドレスにバインドできますか? さらに一歩進めて、1 つのアプリケーションが特定の IP からのリクエストをリッスンし、もう 1 つのアプリケーションが別のリモート IP からのリクエストをリッスンすることはできますか? 2 つのスレッド (またはフォーク) を開始する 1 つのアプリケーションで同様の動作をさせることはできますが、共通点のない 2 つのアプリケーションでも同じことができるのでしょうか?
ベストアンサー1
検討している OS によって答えは異なります。ただし、一般的には次のようになります。
TCP の場合は、できません。一度に同じポートをリッスンできるアプリケーションは 1 つだけです。ネットワーク カードが 2 つある場合は、同じポート番号を使用して、1 つのアプリケーションを最初の IP でリッスンし、2 番目のアプリケーションを 2 番目の IP でリッスンすることができます。
UDP (マルチキャスト) の場合、複数のアプリケーションが同じポートをサブスクライブできます。
編集: Linuxカーネル3.9以降では、SO_REUSEPORT
オプションを使用して複数のアプリケーションが同じポートをリッスンするためのサポートが追加されました。詳細については、この lwn.net の記事。