Re: Ответ сокета UDP из виртуального интерфейса eth0:0
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.11.09 15:41
Оценка:
Здравствуйте, sakhnik, Вы писали:

S>Наткнулся на неприятнй сюрприз. На машине работает физический интерфейс eth0, а также создано ещё одно имя для него eth0:0 в той же подсетке. Некое приложетие привязывается к UDP сокету и отвечает на входные пакеты с IPADDR_ANY. Как оказалось, если пакет приходит с адреса интерфейса eth0:0, сокет почему-то отвечает, заполняя src_addr с eth0. Отсюда начинается куча проблем.


S>Значит:


S>
S>client         server
S>"hello" ------> eth0.0 (192.168.38.2)
S>        <--X--- eth0 (192.168.38.1)
S>


S>В чём может быть дело? И как заставить сокет UDP использовать в качестве обратного адрес входящего пакета для отсылки ответа?


Кроссплатформенно это решается только созданием отдельного UDP сокета на каждый локальный IP. Так делают named, ntpd и прочие.

В BSD есть опции IP_RECVDSTADDR и IP_SENDSRCADDR, но авторы Linux решили, что это моветон, но замены не дали.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.