Есть программа, которая слушает UDP сокет, который забинден на все интерфейсы хоста. Хочу чтобы эта программа умела определять на какой интерфейс прислан конкретный пакет. Как это реализовать???
Я от тоже так подумал :) в результате тестовая прога выдает следующее: 1)127.2.0.128.1.127.0.0.1.0.0.0.0.0.0.0.0 2)172.2.0.128.12.172.30.77.118.0.0.0.0.0.0.0.0
В первом случае я лез к серверу ч-з lo на том же хосте, а во второй раз с 172.30.77.118. Как видно из вывода, адрес клиента в sockaddr присутствует, а вот адрес интерфеса на который послан пакет - отсутствует ( этот адрес 172.30.77.106 ). Нету даже индекса интерфейса :(((
>а что, так сложно по адресу клиента вычислить интерфейс? Не всегда это можно определить однозначно. У меня, например, на хосте адреса 172.30.77.106, 172.30.77.107, 172.30.77.108, а клиент сидит на 172.30.77.118 и время от времени кидает пакеты на любой из интерфейсов сервера. Только не спрашивай зачем такой изврат! Это все для подержки legacy ситсетмы.
Вариант с потоками конечно работоспособен, но его я оставлю на тот случай, если других путей не будет. (Потоков у меня дохренища выйдет :(( ).
Тоже не годится. У меня snmp агент. Я пока ч-з net-snmp до sockaddr добрался, запарился! Сечас мне непонятно только назначение первых трех байт в sockaddr. Думаю , в них должна содержаться полезная для меня инфа. ;)
Мне лень столько писать, да еще и править под себя net-snmp :) Я лучше заюзаю getsockopt + IP_PKTINFO ;) Так тоже прийдется net-snmp править, но изменений будет меньше.