Здравствуйте, x-code, Вы писали:
XC>Есть компьютер с несколькими сетевыми картами
XC>Нужно отправлять UDP пакеты (причем широковещательные) через конкретный сетевой адаптер.
XC>Как это сделать?
XC>Интересует решение как для windows так и для linux.
Варианта два:
1) Как уже ответили выше, делаем bind() на нужный адрес.
2) SO_BINDTODEVICE
Но тут надо принять во внимание такую вещь как host model на целевой оси
https://technet.microsoft.com/en-us/library/2007.09.cableguy.aspx
Ибо могут быть сюрпризы:
http://forums.codeguru.com/showthread.php?487139-Socket-binding-with-routing-table
On Windows, a call to bind() affects card selection only incoming traffic, not outgoing traffic.
Thus, on a client running in a multi-homed system (i.e., more than one interface card), it's the network stack that selects the card to use, and it makes its selection based solely on the destination IP, which in turn is based on the routing table. A call to bind() will not affect the choice of the card in any way.