Определить фактический интерфейс, через который подключен клиент, если прослушивает INADDR_ANY? - PullRequest
1 голос
/ 10 марта 2020

В сценарии, где я прослушиваю порт TCP через INADDR_ANY, получаю клиентское соединение и теперь хочу принимать UDP-пакеты от этого соединения, как я могу определить фактический IP-адрес интерфейса, который маршрутизирует этому клиенту привязать сокет UDP к этому интерфейсу вместо INADDR_ANY? getsockname моего прослушивающего сокета вернет INADDR_ANY, насколько я понимаю, так есть ли какой-нибудь другой сокет API, который может предоставить эту информацию? Или я должен вручную сохранить таблицу маршрутов, в которой я пытаюсь разрешить каждый клиент, подключившись к нему (или отправить ARP на все интерфейсы и посмотреть, какой из них разрешает адрес?).

1 Ответ

2 голосов
/ 10 марта 2020

Как только вы приняли соединение, вы можете получить локальный адрес нового (подключенного) сокета, который вернул accept, с помощью функции getsockname.

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