1. ホーム

[解決済み】2つのアプリケーションが同じポートをリッスンすることは可能ですか?

2022-03-27 01:19:29

質問

同じマシン上の2つのアプリケーションは、同じポートおよびIPアドレスにバインドすることができますか?さらに一歩進んで、あるアプリケーションはあるIPから来るリクエストを聞き、もう一方は別のリモートIPからのリクエストを聞くことができますか? 2つのスレッド(またはフォーク)を起動する1つのアプリケーションが同様の動作をすることは知っていますが、何も共通点がない2つのアプリケーションが同じことをできるのでしょうか?

解決方法は?

どのようなOSを想定しているかによって、答えは異なります。しかし、一般的には

TCPの場合は、ノーです。同じポートで同時にリッスンできるアプリケーションは1つだけです。もし、2つのネットワークカードがあれば、1つのアプリケーションを最初のIPで、2つ目のアプリケーションを2番目のIPで、同じポート番号でリッスンさせることができます。

UDP(マルチキャスト)の場合、複数のアプリケーションが同じポートを購読することができます。

編集:Linux Kernel 3.9 以降では、同じポートをリッスンする複数のアプリケーションのサポートが SO_REUSEPORT オプションを使用します。詳細は以下をご参照ください。 lwn.netの記事です。