Нахождение целевого IP-адреса полученного UDP-сообщения в буст-библиотеке - PullRequest
3 голосов
/ 31 августа 2011

Я работаю с многоадресными UDP-сообщениями. Мне нужно сравнить IP-адрес назначения полученного пакета с многоадресным адресом канала, который должен прослушивать получатель, чтобы убедиться, что он не принимает многоадресные сообщения по другому многоадресному каналу.

Я знаю, что могу узнать IP-адрес назначения, используя сокеты UNIX, используя recvmsg (), а затем выполнить все перечисленные здесь действия: Получить адрес назначения полученного пакета UDP .

Но я использую сокеты ASIO для библиотеки надстроек, и хотя есть функция receive_from (), соответствующая функции recvfrom (), но я не могу найти никакой функции с функциональностью, аналогичной recvmsg (). Кто-нибудь может мне помочь здесь .. Есть ли способ узнать IP-адрес назначения полученного пакета в библиотеке Boost ??

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Типичным решением проблемы отсутствия доступа к адресу назначения является открытие одного сокета на группу многоадресной рассылки и сопоставление сокета с адресом в вашем приложении.

0 голосов
/ 31 августа 2011

Давайте сделаем шаг назад. Как вы думаете, почему вы должны искать адрес назначения и фильтровать его в пространстве пользователя? Разве операционная система не должна делать это для вас? Наверное, так и должно быть!

Вы на самом деле получаете дейтаграммы, которые вам не нужны? Если это так, скорее всего, потому что вы не сделали достаточно строгую настройку слушателя. Например, вы должны связывать и прослушивать только определенную многоадресную группу (адрес), порт и интерфейс. Возможно, вы не указали какую-то часть этого? Если это не так, возможно, вы объясните, что происходит, что заставляет вас задать этот вопрос.

...