¿Es posible recibir datos de más de un grupo de multidifusión en un solo socket?Suscripción a múltiples grupos de multidifusión en un socket (Linux, C)
Por ejemplo:
void AddGroup(int sock,
const char* mc_addr_str,
int mc_port,
const char* interface) {
struct sockaddr_in mc_addr;
memset(&mc_addr, 0, sizeof(mc_addr));
mc_addr.sin_family = AF_INET;
mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
mc_addr.sin_port = htons(mc_port);
if ((bind(sock, (struct sockaddr *) &mc_addr,
sizeof(mc_addr))) < 0) {
perror("bind() failed");
exit(1);
}
// construct an IGMP join request structure
struct ip_mreq mc_req;
mc_req.imr_multiaddr.s_addr = inet_addr(mc_addr_str);
mc_req.imr_interface.s_addr = inet_addr(interface);
if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(void*) &mc_req, sizeof(mc_req))) < 0) {
perror("setsockopt() failed");
exit(1);
}
}
Este código funciona cuando agrego un grupo de multidifusión. Pero cuando trato de agregar otro, falla el "enlace". No entiendo por qué el enlace debe estar allí en primer lugar. (pero el código no funciona sin él).
Idealmente me gustaría llamar a AddGroup varias veces en el mismo socket. es posible? ¿O necesito un conector por grupo y luego solo uso sondeo?
Usted es incorrecta. Puedes unirte a tantos grupos como quieras. Unirse a grupos de multidifusión no tiene nada que ver con la tupla de identificación. – EJP