2012-02-19 4 views
0

J'ai une question très simple que je ne peux pas sembler trouver une réponse pour n'importe où:bind() - ing sockets UDP à des adresses différentes

Utilisation des sockets Linux C, est-il possible de lier() et recvfrom () Paquets UDP sur une adresse IP autre que l'adresse locale? Par exemple, si un hôte a reçu l'adresse LAN 10.0.0.4 et que je souhaite qu'il puisse recevoir des paquets UDP envoyés à l'adresse 10.0.0.5 sur le port 5505 (par exemple), comment cela serait-il possible?

Je ne trouve tout simplement pas d'exemples de cette utilisation de bind/recvfrom, ce qui semble être assez banal.

Mise à jour

Je suis en train de communiquer paquets entre plusieurs hôtes les cours d'eau. Chaque hôte diffuse des paquets UDP sur sa propre adresse, et n'importe lequel des autres hôtes peut écouter par recvfrom() sur une adresse spécifique. Non, vous ne pouvez généralement pas vous lier à une adresse de monodiffusion non locale. Non

+0

Ce que vous demandez ici n'est pas clair ... Quel est le flux de trafic ici? Qui envoie? Qui lit? Vous avez une machine au milieu? – EdwardH

+3

Ne devriez-vous pas utiliser des adresses de multidiffusion pour cela? – ninjalj

+0

Multicast ou même diffusion locale. –

Répondre

1

Sur un Ethernet, de tels paquets seraient adressés à l'adresse matérielle du propriétaire de cette adresse IP, et par défaut, NIC ne transmettra même pas de tels paquets à votre noyau.

Vous pouvez obtenir l'effet souhaité en utilisant IP Multicast. Vous devez choisir une adresse de multidiffusion particulière pour votre application et la lier à celle-ci, puis utiliser l'option de socket IP_ADD_MEMBERSHIP pour rejoindre le groupe de multidiffusion. Vous pouvez ensuite utiliser recvfrom() de la manière habituelle.

Questions connexes