2013-11-26 2 views
0

Для конкретного примера допустим, что на одном порту порта есть 2 mcast IPs (ip1, ip2). Я хочу запустить два разных процесса, один из которых прослушивает ip1 (а не ip2) и другие, слушая ip2 (а не ip1). Поэтому я вызывал bind с (ip1, port) и (ip2, port) в другом процессе, а не ((INADDR_ANY, порт).
Это прекрасно работает в принципе, но предположим, что нет 2 ips, но 100 IP-адресов, тогда Я в конечном итоге создаю 100 UDP-сокетов, и теперь мой процесс не способен справиться с этим, я вижу много падений пакетов.
В принципе, если я просто привязываюсь к (INADDR_ANY, порт), а затем многоадресный соединять 50 IP-адресов, он отлично работает но если я создаю 50 разных сокетов, то это не так.
Ожидается ли, что сокеты с подстановочными знаками более эффективны, чем конкретные адреса или падение производительности, потому что сейчас существует так много сокетов, а теперь выбор и опрос занимает много времени?
Есть ли способ, которым мне не нужно создавать так много сокетов и процессов, также не получают других процессов s?прослушивание выборочных групп mcast на порту

+0

Возможный дубликат [Получение нескольких многоадресных каналов на одном порту - C, Linux] (http://stackoverflow.com/questions/2741611/receving-multiple-multicast-feeds-on-the-same-port-c -linux) – mpromonet

ответ

0

Я предполагаю, что вы решили использовать привязку обходной путь, потому что вы используете Linux, которые имеют различное поведение по сравнению с другими ОС, как FreeBSD или Windows, (см https://bugzilla.redhat.com/show_bug.cgi?id=231899)

с современным ядром (так как 2.6.31), то можно попросить получить только Помеченных группы многоадресной рассылки переустановки опции IP_MULTICAST_ALL (see manpage ip(7)):

int mc_all = 0; 
    if ((setsockopt(sock, IPPROTO_IP, IP_MULTICAST_ALL, (void*) &mc_all, sizeof(mc_all))) < 0) { 
    perror("setsockopt() failed"); 
    } 

Я никогда не испытывал, что связывание производительности сокета воздействия, тем не менее, вы можете попробовать этот вариант и свяжете на INADDR_ANY. Возможно, это поможет вашей работе?

Смежные вопросы