Frage

Ich möchte an die Multicast -DNS -Gruppe und den Port auf einem Mac OS X -Gerät binden, um einige Bonjour -Funktionen zu prototypisieren. Wenn ich jedoch versuche, mich an den Port zu binden, erhalte ich den folgenden Fehler (übrigens wird dies von Python ausgeführt):

socket.error: [Errno 48] Address already in use

Es sieht so aus, als ob der MDNSResponder an die Adresse bindet: Port mit so_Reuseaddr -nicht festgelegt.

Ist es möglich, den MDNSresponder so auszuführen, dass andere Mittel an die Adresse binden: Portkombination?

War es hilfreich?

Lösung

Die Beschreibung der Fehlercode kann in dieser Situation etwas verwirrend sein. Wenn eine Anwendung an einen Port bindet, ohne die Option SO_RUSEport festzulegen, fällt bei einer zweiten Anwendung versucht, an denselben Port zu binden. Die Bindung schlägt mit dem obigen Fehler fehl. Das Problem liegt jedoch nicht bei der Bindungsadresse, sondern mit dem Port und dem So_Reuse -SEPT -Flag.

Abgesehen davon wird unter Linux die äquivalente (mehrere Multicast -Hörer) Funktionalität durch die Verwendung des SO_Reuseaddr -Flags (gemäß begeben) erreicht So_RUSEport auf Linux).

Die erste Anwendung muss an den SO_RUSEport -Flag -Set binden, ansonsten wird eine exklusive Bindung und andere Anwendungen fehlschlagen. Zum Beispiel:

# For BSD based platforms.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.bind(('', MCAST_PORT))

Es stellt sich heraus, dass der MDNSResponder mit dem SO_RUSEport -Flag -Set beginnen kann, aber nur, wenn er nicht ausschließlich binden, wenn der Dienst gestartet wird. Sie können Folgendes tun, damit es in diesen Modus eingeht:

  1. Herunterfahren des MDNSResponder -Dienstes (DienstWeitere Informationen hier)
  2. Binden Sie an die Adresse: Port mit Ihrer Anwendung mit SO_RUSEPORT
  3. Starten Sie den MDNSResponder -Service neu

Der MDNSResponder -Dienst startet und binden Sie mit dem SO_RUSEport -Flag. Andere Anwendungen können dann den Port bis zum nächsten Neustart teilen. Möglicherweise müssen Sie alle Anwendungen neu starten, die Bonjour verwenden, da sie bei der alten Instanz des alten MDNSresponder registriert wurden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top