Question

Je veux lier au groupe DNS multicast et le port sur une machine x mac os au prototype certaines fonctionnalités de BONJOUR. Cependant, lorsque je tente de se lier au port, je reçois l'erreur suivante (soit dit en passant cela est exécuté à partir de python):

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

Il semble que les lie mDNSResponder à l'adresse suivante:. Le port avec SO_REUSEADDR unset

Est-il possible d'exécuter le mDNSResponder d'une manière qui permet à d'autres agents se lient à l'adresse: combinaison de port

Était-ce utile?

La solution

La description du code d'erreur peut être un peu déroutant dans cette situation. Lorsqu'un binds d'application à un port sans réglage de l'option SO_REUSEPORT, si une deuxième application tente de se lier au même port la liaison échouera avec l'erreur ci-dessus. Le problème est pas avec l'adresse de liaison bien, mais avec le port et le drapeau de SO_REUSEPORT.

En aparté, sous Linux, la fonctionnalité équivalente (plusieurs auditeurs de multidiffusion) est obtenue en utilisant l'indicateur de SO_REUSEADDR (selon SO_REUSEPORT sur linux ).

La première application doit se lier avec le drapeau de SO_REUSEPORT, sinon il aura une liaison exclusive et d'autres binds d'application échouera. Par exemple:

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

Il se trouve que le mDNSResponder peut commencer par l'indicateur de SO_REUSEPORT, mais seulement si elle ne se lie pas exclusivement lorsque le service est démarré. Vous pouvez faire ce qui suit pour le faire entrer dans ce mode:

  1. Arrêter le service mDNSResponder ( plus d'infos ici )
  2. Bind à l'adresse: port avec votre application à l'aide SO_REUSEPORT
  3. Redémarrez le service mDNSResponder

Le service mDNSResponder commencera et se lient en utilisant le drapeau SO_REUSEPORT. D'autres applications peuvent ensuite partager le port jusqu'à ce que le prochain redémarrage. Vous devrez peut-être redémarrer toutes les applications qui utilisent comme ils Bonjour ont été enregistrés à l'ancienne instance de mDNSResponder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top