1

SO_REUSEPORT に関するディスカッションで、次の質問がredditに投稿されましたが、回答はありませんでした。スタックオーバーフローが答えを知っているかどうか疑問に思っています。

これがマルチキャストとどのように相互作用するか誰か教えてもらえますか?

プログラムがマルチキャスト UDP メッセージをリッスンする必要があるアプリケーションを持っていますが、このプログラムは同じコンピューターで複数回起動される可能性があります。メッセージが来ると、すべてのリッスン プロセスがそれを取得する必要があります。

Linux では、SO_REUSEPORT を設定しなくても問題なく動作することに気付きました。私の理解が正しければ、SO_REUSEPORT を設定するのは間違っている可能性があります。UDP メッセージをプロセス間で分散させたくありません。コピーを取得するためのすべてのプロセス。ただし、OS X では、SO_REUSEPORT が設定されていない限り、プログラムの 2 回目の実行で空きポートを見つけることができません。

tl;dr: マルチキャストを使用する場合、SO_REUSEPORT を設定する必要がありますか?

4

1 に答える 1

2

SO_REUSEPORT を使用すると、複数のソケットを同じポートとアドレスにバインドできます。唯一の要件は、以前のソケットでこのオプションが設定されている必要があることです。したがって、sock1 と sock2 の 2 つのソケットを同じポート (およびアドレス) にバインドする場合、s2 は、sock1 と sock2 の両方が SO_REUSEPORT を設定している場合にのみ、ポート/アドレスを再利用できます。マルチキャストに関しては、sock1 と sock2 の両方が同じマルチキャスト グループの受信者である場合、両方ともデータのコピーを取得します。

この回答が役立つかもしれません: Socket options SO_REUSEADDR and SO_REUSEPORT, how do they difference? すべての主要なオペレーティング システムで同じ意味ですか?

于 2013-08-26T17:53:20.607 に答える