Поиск интерфейса на UDP-сокете - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть приложение, в котором я привязал сокет к исходящему интерфейсу из числа немногих, использующих SO_BINDTODEVICE.

Теперь проблема в том, что когда я получаю ответ, мне нужно знать, с какого интерфейса он пришел.Одного ip-адреса, с которого пришел ответ, недостаточно, поскольку один и тот же ip связан с несколькими интерфейсами.

Я использовал приведенный ниже код, представленный в вопросах stackoverflow.Но он не дает ошибок сегментации во второй итерации цикла for (первая итерация вошла в продолжение части цикла).

Может ли кто-нибудь помочь?

C ++ DGRAM-сокет получаетАдрес получателя

Как определить, с какого интерфейса сокет получил сообщение?

1 Ответ

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

Проблема решена. Параметр IP_PKTINFO должен быть установлен сразу после создания сокета перед любым другим использованием сокета, и он работает нормально.

В моем случае я использовал сокет после создания для отправки данных, а последний добавлен в набор дескрипторов выбора для чтения. Затем, наконец, перед вызовом receive я устанавливал IP_PKTINFO, и он всегда возвращал индекс интерфейса 0.

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