c Verwendungen von SO_REUSEADDR?




setsockopt so_reuseaddr (2)

Für TCP: Der primäre Zweck besteht darin, einen geschlossenen / abgemeldeten Prozess an der gleichen Adresse neu zu starten.

Das Flag wird benötigt, da der Port in den Zustand TIME_WAIT geht, um sicherzustellen, dass alle Daten übertragen werden.

Wenn zwei Sockets an dieselbe Schnittstelle und denselben Port gebunden sind und Mitglieder derselben Multicast-Gruppe sind, werden die Daten an beide Sockets übermittelt.

Ich denke, eine alternative Verwendung wäre ein Sicherheitsangriff, um Daten abzufangen.

( Quelle )

Für UDP: SO_REUSEADDR wird für Multicast verwendet

Mehr als ein Prozess kann an den gleichen SOCK_DGRAM-UDP-Port binden, wenn dem Bind () Folgendes vorausgeht:

int eins = 1; setsockopt (Socke, SOL_SOCKET, SO_REUSEADDR, & eins, sizeof (eins))

In diesem Fall wird jedes eingehende Multicast- oder Broadcast-UDP-Datagramm, das für den gemeinsam genutzten Port bestimmt ist, an alle Sockets übergeben, die an den Port gebunden sind.

( Quelle )

Ich habe SO_REUSEADDR , um meinen Server zu haben, der beendet wurde, um neu zu starten, ohne sich zu beklagen, dass der Socket bereits benutzt wird. Ich frage mich, ob es andere Verwendungen von SO_REUSEADDR ? Hat jemand die Socket-Option für andere Zwecke als den genannten Zweck verwendet?


Answer #1

Die andere Hauptanwendung besteht darin, mehreren Sockets zu erlauben, an UDP an denselben Port zu bind() . Möglicherweise denken Sie nicht, dass dies auftreten würde, aber manchmal möchten möglicherweise mehrere Apps Broadcast- / Multicast-Adressen mit einer bestimmten Portnummer abhören. Sie erlaubt es auch, sich an die Platzhalteradresse zu binden und gleichzeitig an eine bestimmte Adresse zu binden. Zum Beispiel könnte Apache an *: 80 und 10.11.12.13:80 binden





tcp