Was sind die Anwendungsfälle von SO_REUSEADDR?

Lesezeit: 2 Minuten

Benutzer-Avatar
Prabhu. S

Ich habe benutzt SO_REUSEADDR dass mein Server, der beendet wurde, neu gestartet werden kann, ohne sich darüber zu beschweren, dass der Socket bereits verwendet wird. Ich habe mich gefragt: Gibt es andere Verwendungen von SO_REUSEADDR? Hat jemand die Socket-Option für einen anderen als den genannten Zweck verwendet?

Benutzer-Avatar
Brian R. Bondy

Zum TCPbesteht der Hauptzweck darin, einen geschlossenen/beendeten Prozess auf derselben Adresse neu zu starten.

Das Flag wird benötigt, weil der Port in a geht TIME_WAIT Status, um sicherzustellen, dass alle Daten übertragen werden.

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

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

(Quelle)


Zum UDP, SO_REUSEADDR wird für Multicast verwendet.

Mehr als ein Prozess kann an denselben binden SOCK_DGRAM UDP-Port, wenn die bind() vorangestellt ist:

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

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

(Quelle)

  • Klärung erforderlich. Ein Listening-Port geht nicht in TIME_WAIT, akzeptierte Verbindungen jedoch möglicherweise. TIME_WAIT ist nicht da, um sicherzustellen, dass alle Daten übertragen werden, sondern um Verwechslungen mit einer nachfolgenden Verbindung zwischen denselben Endpunkten zu vermeiden.

    – Benutzer207421

    2. Januar 2013 um 6:32 Uhr

  • Geschieht die Bindung auf der Senderseite ODER auf der Empfängerseite (für UDP: SO_REUSEADDR)? Was passiert, wenn Sender und Empfänger separate Knoten im Netzwerk sind?

    – Sammy

    26. Januar 2018 um 11:10 Uhr

  • @Sammy Der Empfänger (Server) macht das SO_REUSEADDR + bind() auf einem UDP IP.:port. Der Absender (Kunde) bind() + sendmsg() oder nur sendto() Nachrichten an den Empfänger senden. Für die Hin- und Herkommunikation erstellen beide Computer einen Socket zum Empfangen (also verhalten sich beide wie ein Server, sogar der Client). Wenn Sie an TCP gewöhnt sind, ist dies definitiv verwirrend. Wenn Sie separate Knoten (Computer) haben, dann die SO_REUSEADDR ist nicht sinnvoll, da Sie nur einen Zuhörer pro Computer haben können.

    – Alexis Wilke

    14. März um 16:20 Uhr

Die andere Hauptverwendung besteht darin, mehrere Steckdosen zuzulassen bind() an den gleichen Port auf UDP. Sie denken vielleicht nicht, dass das auftauchen würde, aber manchmal möchten mehrere Apps Broadcast-/Multicast-Adressen mit einer bestimmten Portnummer abhören. Es ermöglicht auch die Bindung an die Platzhalteradresse und gleichzeitig die Bindung an eine bestimmte Adresse. Beispielsweise könnte Apache an *:80 und 10.11.12.13:80 binden

1352550cookie-checkWas sind die Anwendungsfälle von SO_REUSEADDR?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy