2010-08-17 4 views
2

J'utilise recvfrom pour recevoir des messages muticast du réseau. Il existe deux interfaces réseau sur le système et recvfrom ne reçoit que la première interface. Lorsque la seconde interface est fonctionnelle, recvfrom est bloqué indéfiniment et ne reçoit un paquet qu'après le passage à la première interface. SO_REUSEADDR est utilisé pour définir les options lors de l'ouverture de la socket. Supprimer cette option n'aide pas non plus. Des idées? Je suis coincé.recvfrom collé sur une interface

+0

Voulez-vous être en mesure de recevoir à partir des deux interfaces, ou juste un? Si ce n'est le cas, essayez de relier votre socket à l'adresse de cette interface plutôt que de lui donner la valeur par défaut "any". –

+1

Bonjour, Je le lie à INADDR_ANY et attend de recevoir la multidiffusion sur l'une ou l'autre interface, selon ce qui est actif. Mais recevfrom ne fonctionne que sur une interface et reste bloqué lorsque l'autre interface est active. – Rohith

Répondre

0

Je créer un socket pour chaque interface et me lier explicitement à l'interface plutôt que d'utiliser INADDR_ANY. Le problème avec l'utilisation de INADDR_ANY est qu'une fois que vous avez reçu un datagramme, le socket est probablement implicitement lié à l'interface sur laquelle le datagramme est arrivé, à mon humble avis il doit être de sorte que vous puissiez envoyer une réponse de l'interface arrivé sur ...

0

J'ai été en mesure de résoudre ce problème en utilisant DROP_MEMBERSHIP et ADD_MEMBERSHIP sur le socket de multidiffusion chaque fois que l'interface réseau a changé. J'ai également dû apporter des modifications à la bibliothèque de socket, où initialement elle renvoyait la première interface compatible multicast disponible (même si aucune adresse IP n'est affectée) pour renvoyer cette interface multicast activée et ayant une adresse IP affectée.

Questions connexes