SO_REUSEADDR
以前は、ソケットがすでに使用されていると文句を言わずに、サーバーを終了して再起動していました。私は他の用途があるかどうか疑問に思いましたかSO_REUSEADDR
?上記以外の目的でソケットオプションを使用した人はいますか?
2 に答える
TCPの主な目的は、閉じられた/強制終了されたプロセスを同じアドレスで再起動することです。
TIME_WAIT
ポートはすべてのデータが確実に転送される状態になるため、フラグが必要です。
2 つのソケットが同じインターフェイスとポートにバインドされていて、それらが同じマルチキャスト グループのメンバーである場合、データは両方のソケットに配信されます。
別の用途は、データを傍受しようとするセキュリティ攻撃になると思います。
(ソース)
UDPの場合、SO_REUSEADDR
マルチキャストに使用されます。
の前に次のものがある場合、複数のプロセスが同じ
SOCK_DGRAM
UDP ポートにバインドされる可能性があります。bind()
int one = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
この場合、共有ポート宛てのすべての着信マルチキャストまたはブロードキャスト UDP データグラムは、ポートにバインドされているすべてのソケットに配信されます。
(ソース)
もう 1 つの主な用途は、複数のソケットをbind()
UDP の同じポートに接続できるようにすることです。思いつかないかもしれませんが、複数のアプリが特定のポート番号を持つブロードキャスト/マルチキャスト アドレスをリッスンしたい場合があります。また、特定のアドレスにバインドしながら、ワイルドカード アドレスにバインドすることもできます。たとえば、Apache は *:80 および 10.11.12.13:80 にバインドする可能性があります。