Ceci est une question macOS. J'essaie de configurer un socket UDP qui reçoit des messages SSDP, c'est-à-dire des paquets UDP, envoyés à des adresses de multidiffusion. Je souhaite limiter la réception de ces paquets à partir d'une seule interface réseau.Réception de paquets UDP multicast à partir d'une seule interface réseau sur macOS
J'ai essayé
int fd = socket(AF_INET, SOCK_DGRAM, 0);
char* itf = "en0";
int res = setsockopt(fd, SOL_SOCKET, IP_RECVIF, itf, strlen(itf));
L'appel setsockopt échoue avec errno 42
(protocole non disponible). J'ai également trouvé SO_BINDTODEVICE
qui peut être utilisé dans le même but, mais il semble que ce n'est pas disponible sur macOS. L'utilisation de bind avec le port et l'adresse ne fonctionne pas non plus. Ensuite, aucun paquet envoyé à l'adresse de multidiffusion n'est reçu sur cette socket.
Merci beaucoup, cela a résolu le problème. J'utilise actuellement GCDAsyncUdpSocket de Swift. La méthode 'joinMulticastGroup()' accepte l'interface en tant que deuxième paramètre. L'implémentation utilise 'setsockopt()' avec 'IP_ADD_MEMBERSHIP'. Je ne sais pas pourquoi quelqu'un a voté votre réponse. – Bokeh