Вещается несколько мультикаст потоков, но все на одинаковый порт. Я делаю так, чтобы создать сокет:
  struct sockaddr_in socket_address = {0};
  uint8_t opt;
  struct sockaddr_in sin = {0};
  int sockfd =  socket( AF_INET, SOCK_DGRAM, 0 );
  opt = 1;
  setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
  setsockopt( sockfd, SOL_SOCKET, SO_RCVBUF, &window_size, sizeof(window_size) );
  setsockopt( sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt));
  sin.sin_family = AF_INET;
  sin.sin_port = htons(port);
  sin.sin_addr.s_addr = INADDR_ANY;
  bind(sockfd, (struct sockaddr *) &sin, sizeof(struct sockaddr_in);
а потом присоединяю его к группе:
  struct ip_mreq mreq = {0};
  mreq.imr_multiaddr.s_addr = ip;
  mreq.imr_interface.s_addr = htonl(INADDR_ANY);
  setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(struct ip_mreq));
Пробовал для sockaddr_in указывать конкретный ip, а не INADDR_ANY. Не помогло.
