UDP unicast: два процесса прослушивают один и тот же порт udp; только один прием пакетов - PullRequest
4 голосов
/ 15 марта 2012

Назначение: для получения одноадресных пакетов UDP, отправленных на один порт в двух разных процессах.

Система: Linux, Язык: C

Я могу связать два сокета в двух разных процессахна тот же порт, используя SO_REUSEADDR.Но, как и ожидалось, пакеты принимаются только в одном (связанном позже).

Можно ли получать пакеты в обоих процессах?Если нет, то как tcpdump может читать, но не использовать пакеты.

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Это невозможно с API сокетов, и tcpdump выбирает пакеты прямо из сетевого интерфейса перед любой обработкой TCP / IP.

Ваш единственный шанс - получить пакеты в одном процессе и отправить их другому.

0 голосов
/ 29 декабря 2012

Если вы открываете сокет, связываете, слушаете, а затем fork () вашего процесса, каждый раз входящие запросы на соединение будут переданы случайно выбранному, одному из этих процессов (я никогда не удосужился выяснить стратегия, которую использует Linux, потому что она хорошо балансирует нагрузку).

В настоящее время я тестирую то же поведение с сервером UDP.

0 голосов
/ 15 марта 2012

Почему одноадресный?Это именно то, для чего используется многоадресная рассылка.

Чтобы ответить на ваш второй вопрос - tcpdump получает копию каждого пакета, который он прослушивает, через нечто, называемое bpfи это должно явно поддерживаться драйвером сетевой карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...