UDP: Прослушивание одного и того же порта для двух разных многоадресных потоков

I необходимо прослушивать 2 разные группы многоадресной рассылки, использующие один и тот же порт. Программа A будет прослушивать 230.0.0.1 и Программа B из 230.0.0.2 . Обе группы многоадресной рассылки используют один и тот же порт 2000 , и я не могу его контролировать.

Когда я запускаю свои программы, я получаю оба многоадресных потока в каждой программе, что это оба пакета данных, транслируемых на 230.0.0.1 и 230.0.0.2 . Я подозреваю, что проблема связана с общим портом. Это код, который я использую для подписки на многоадресную рассылку:

if( (sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) {
  perror("socket");
  return -1;
}

if( setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0 ) {
  perror("setsockopt SO_REUSEADDR");
  return -1;
}

memset(&in_addr, 0, sizeof(in_addr));
in_addr.sin_family = AF_INET;
in_addr.sin_addr.s_addr = htonl(INADDR_ANY);
in_addr.sin_port = htons(2000);
if( bind(sd, (struct sockaddr*)&in_addr, sizeof(in_addr)) < 0 ) {
  perror("bind");
  return -1;
}

memset(&req, 0, sizeof(req));
inet_aton(intfc_ip, &req.imr_interface);
inet_aton("230.0.0.1", &req.imr_multiaddr);
if( setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &req, sizeof(req)) < 0 ) {
  perror("setsockopt IP_ADD_MEMBERSHIP");
  return -1;
}

recv()...

Как мне отфильтровать определенную группу многоадресной рассылки в каждой программе?

5
задан Rasclatt 8 November 2014 в 00:05
поделиться