Для конкретного примера допустим, что на одном порту порта есть 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
A
ответ
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. Возможно, это поможет вашей работе?
Смежные вопросы
- 1. Прослушивание * адрес на порту 11111
- 2. Службы Windows WebSocket прослушивание на порту 8080
- 3. MATLAB Прослушивание по порту TCP/IP
- 4. чат веб-службы с несколькими процессами, прослушивание на одном порту
- 5. Прослушивание 2 отправителей на одном USB-порту с использованием Docklight
- 6. Как остановить прослушивание оракула на порту 1521 (TNS)
- 7. Прослушивание нескольких групп одновременно в SignalR
- 8. Ошибка метеорита (метеорит): прослушивание EADDRINUSE на порту 3000, ошибка: подключить ECONNREFUSED на других портах
- 9. Использование Socket.io, AngularJS и Express, прослушивание клиента на другом порту, чем сервер работает на
- 10. Прослушивание КАЖДОГО порта на машине
- 11. C# прослушивание на микрофоне
- 12. Запрос на прослушивание справочника
- 13. Тесты на прослушивание/селен
- 14. Прослушивание кликов на RecyclerView
- 15. Python, прослушивание на двух сокетах одновременно
- 16. Прекратить прослушивание порта
- 17. Прослушивание TCP-пакетов на порту только считывает данные при закрытии соединения
- 18. При создании приложения «Ошибка: прослушивание EACCES» при запуске приложения с pm2 на порту 80?
- 19. Многоадресное прослушивание на одном и том же хосте и порту в C
- 20. Android M: Влияние выборочных разрешений на рекламу
- 21. Печать выборочных элементов
- 22. Генератор случайных выборочных выборок
- 23. Сервер сокетов на другом порту и клиент на другом порту
- 24. Gitlab на порту 8080
- 25. Socket.io на порту 80
- 26. Node.js на порту 80
- 27. Socketerror на порту 80
- 28. TNSLSR на порту 8080
- 29. RedHat на порту 80
- 30. Служба на порту 80
Возможный дубликат [Получение нескольких многоадресных каналов на одном порту - C, Linux] (http://stackoverflow.com/questions/2741611/receving-multiple-multicast-feeds-on-the-same-port-c -linux) – mpromonet