Suscribirse a múltiples grupos de multidifusión en un socket (Linux, C)

Es posible recibir datos de más de un grupo de multidifusión en un solo socket?

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, el "enlace" falla. 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 socket por grupo y luego solo uso el sondeo?

Respuestas a la pregunta(12)

Su respuesta a la pregunta