23

SO_REUSEADDR以前は、ソケットがすでに使用されていると文句を言わずに、サーバーを終了して再起動していました。私は他の用途があるかどうか疑問に思いましたかSO_REUSEADDR?上記以外の目的でソケットオプションを使用した人はいますか?

4

2 に答える 2

41

TCPの主な目的は、閉じられた/強制終了されたプロセスを同じアドレスで再起動することです。

TIME_WAITポートはすべてのデータが確実に転送される状態になるため、フラグが必要です。

2 つのソケットが同じインターフェイスとポートにバインドされていて、それらが同じマルチキャスト グループのメンバーである場合、データは両方のソケットに配信されます。

別の用途は、データを傍受しようとするセキュリティ攻撃になると思います。

ソース


UDPの場合、SO_REUSEADDRマルチキャストに使用されます。

の前に次のものがある場合、複数のプロセスが同じSOCK_DGRAMUDP ポートにバインドされる可能性があります。bind()

int one = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));

この場合、共有ポート宛てのすべての着信マルチキャストまたはブロードキャスト UDP データグラムは、ポートにバインドされているすべてのソケットに配信されます。

ソース

于 2009-02-23T15:03:03.340 に答える
10

もう 1 つの主な用途は、複数のソケットをbind()UDP の同じポートに接続できるようにすることです。思いつかないかもしれませんが、複数のアプリが特定のポート番号を持つブロードキャスト/マルチキャスト アドレスをリッスンしたい場合があります。また、特定のアドレスにバインドしながら、ワイルドカード アドレスにバインドすることもできます。たとえば、Apache は *:80 および 10.11.12.13:80 にバインドする可能性があります。

于 2009-02-23T15:04:32.417 に答える