9
votes

S'abonner à plusieurs groupes de multidiffusion sur une socket (Linux, C)

est-il possible de recevoir des données de plusieurs groupes de multidiffusion sur une seule socket?

Par exemple: xxx

Ce code fonctionne lorsque j'ajoute un groupe de multidiffusion . Mais quand j'essaie d'ajouter une autre, la "liaison" échoue. Je ne comprends pas bien pourquoi la liaison doit être là en premier lieu? (Mais le code ne fonctionne pas sans elle).

Idéalement, je voudrais appeler Addgroup plusieurs fois sur le même socket. Est-ce possible? Ou avez-vous besoin d'une prise par groupe, puis utilisez simplement un sondage?


0 commentaires

6 Réponses :


3
votes

Vous ne liez qu'une prise une seule fois. Passer la liaison la deuxième fois et voir ce qui se passe.


0 commentaires

8
votes

Vous pouvez rejoindre autant de groupes de multidiffusion que vous le souhaitez, à l'aide de l'appel SETSOCLOPTOPT () AVEC L'option IP_ADD_Membership, plutôt que de lier ().


2 commentaires

Lorsque je supprimai la "liaison" des appels ultérieurs à AddGroup, seul le premier groupe de multidiffusion semble être "souscrit" à.


@Switch Si un groupe n'est pas accessible via votre itinéraire IP par défaut, vous devez spécifier l'adresse locale sortante appropriée lorsque vous rejoignez le groupe, le message IGMP «Ajouter une appartenance» passe dans la direction appropriée.



2
votes

lier à l'adresse passive, c'est-à-dire 0.0.0.0 pour IPv4 et utilisez ASM ou SSM pour tirer des groupes supplémentaires, par exemple. ip_add_membership comme indiqué.

Vous ne pouvez que lier une fois.


0 commentaires

3
votes

Vous pouvez rejoindre autant de groupes de multidiffusion que vous souhaitez sur une seule prise. Voir Setsockopt (), IP_PKTINFO pour un moyen de reconnaître quel groupe de multidiffusion vous lisez des données de.


0 commentaires

0
votes

Oui, il est possible: regardez l'exemple dans le lien ( http: //www.tenouk. com / module41c.html ) Pour raccourcir cela en quelques étapes:

  1. vous setsockopt avec SO_REUSeADDRDRR
  2. vous liez sur inaddr_any
  3. vous setSockopt avec ip_add_membership sur chaque groupe que vous souhaitez recevoir de datagramme de.
  4. Il me semble que l'utilisation d'IP_PKTINFO donne une option pour distinguer les paquets reçus, mais l'expéditeur doit prendre soin de les préparer ( Réglage de l'adresse IP source pour une prise UDP )

0 commentaires

0
votes

dans OSES basée sur UNIX:

Si vous devez vous attacher à une adresse de multidiffusion, vous ne pouvez pas appeler Bind () plus d'une fois. Et vous devrez vous attacher à une adresse de multidiffusion lorsque vous vous attendez à plus d'un flux de multidiffusion utilisant le même port de destination et plusieurs processus fonctionnant dans le même dispositif recevant ces multidiffests.

Par exemple, lorsque vous avez des flux multidiffuseurs: 239.0.0.1:1234, 239.0.0.0.2:1234, 239.0.0.0.3:1234 et 239.0.0.4:1234, et vous souhaitez recevoir 239.0.0.1, 239.0.0.2 en cours de processus -A et souhaitez recevoir 239.0.0.3, 239.0.0.4 en process-b, vous ne pouvez pas y accomplir lorsque les deux traitements A et B fonctionnent dans le même dispositif.


0 commentaires