Вы можете использовать как триггер, так и поплавок в условиях вашего перехода.
Кроме привязки к каждому интерфейсу, я не знаю о пути с IPv4 по сути.
IPv6 добавил опцию сокета IPV6_PKTINFO обратиться к этому недостатку. С той опцией в действительности, a struct in6_pktinfo
будет возвращен как вспомогательные данные.
dwc является правильным, IPV6_PKTINFO будет работать на IPv6 на Linux.
Кроме того, IP_PKTINFO будет работать на IPv4 — Вы видите детали в IP страницы справочника (7)
Ее некоторое время, так как я делал C/C++ кодирование TCP/IP, но насколько я помню на каждом сообщении (или получил сокет) можно войти в информацию о заголовках IP. Эти заголовки должны включать адрес получения, который будет IP интерфейса, о котором Вы спрашиваете.
За пределами открытия отдельного сокета в каждом интерфейсе как предложенный Glomek единственный способ, которым я знаю, чтобы сделать это окончательно в Windows, состоит в том, чтобы использовать неструктурированный сокет, например,
SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Каждый получает от этого сокета, будет пакет IP, который содержит и исходные адреса и адреса назначения. Программа я продолжаю работать, требует, чтобы я поместил сокет в неразборчивый режим с помощью опции SIO_RCVALL. Выполнение этого означает, что я получаю каждый пакет IP, который интерфейс "видит" в сети. Извлечь пакеты явно для моего приложения требует, чтобы я отфильтровал данные с помощью адресов и портов в заголовках TCP/UDP и IP. Очевидно, это - вероятно, больше служебное, чем Вы интересуетесь. Я только упоминаю это для высказывания этого - я никогда не использовал неструктурированный сокет, не помещая его в неразборчивый режим. Таким образом, я не уверен, можно ли связать его с INADDR_ANY и просто использовать его в качестве обычного сокета от той точки вперед или нет. Мне казалось бы, что Вы можете; я только что никогда не пробовал его.
Править: Прочитайте эту статью для ограничений относительно неструктурированных сокетов в Windows. Это самое большое препятствие, с которым я столкнулся на своем проекте, было то, что нужно быть членом Группы администраторов для открытия неструктурированного сокета на Windows 2000 и позже.