Подтвердить что ты не робот

Использование определенного сетевого интерфейса для сокета в окнах

Есть ли надежный способ в Windows, помимо изменения таблицы маршрутизации, чтобы заставить вновь созданный сокет использовать определенный сетевой интерфейс? Я понимаю, что bind() к IP-адресу интерфейса не гарантирует этого.

4b9b3361

Ответ 1

(Ok второй раз повезло..)

FYI есть еще один вопрос здесь выполнить connect() на конкретном сетевом адаптере по тем же строкам...

Согласно The Cable Guy

Windows XP и Windows Server® 2003 используйте слабую модель хоста для отправки и получает для всех интерфейсов IPv4 и сильная модель хоста для отправлений и получает для всех интерфейсов IPv6. Вы не может настроить это поведение. Стек TCP/IP следующего поколения Windows Vista и Windows Server 2008 поддерживает сильные хосты и получает как IPv4, так и IPv6 по умолчанию для всех интерфейсов, кроме Интерфейс туннелирования Teredo для Teredo для конкретного узла.

Итак, чтобы ответить на ваш вопрос (правильно, на этот раз) в Windows XP и Windows Server 2003 IP4 нет, но для IP6 да. А для Windows Vista и Windows 2008 да (за исключением определенных обстоятельств).

Также из http://www.codeguru.com/forum/showthread.php?t=487139

В Windows вызов функции bind() влияет на выбор карты только входящего трафика, не исходящий трафик. Таким образом, на клиент работает в многопользовательской системе (то есть более одной интерфейсной платы), это сетевой стек, который выбирает используемой карты, и выбор основывается исключительно на IP-адрес назначения, который, в свою очередь, основан в таблице маршрутизации. Вызов bind() не повлияет на выбор карты в любом случае.

Это как-то связано с что-то называемое "Слабая конечная система" ( "Слабая E/S" ). Vista изменена на сильная модель E/S, поэтому проблема может не возникает в Vista​​strong > . Но все предыдущие версии Windows использовали слабый E/S модель.

При слабой модели E/S это таблица маршрутизации, которая определяет, какая карточка используется для исходящего трафика в многосетевая система.

Посмотрите, предлагают ли эти потоки некоторые понимание:

"Локальное связывание сокетов на многочленных хост в Windows XP не работает" на http://www.codeguru.com/forum/showthread.php?t=452337

"Как подключить порт к указанному Сетевая карта?" На http://www.codeguru.com/forum/showthread.php?t=451117. В этой теме упоминается Функция CreateIpForwardEntry(), которая (Я думаю) можно использовать для создания в таблице маршрутизации, чтобы все исходящий IP-трафик с указанным сервер маршрутизируется через указанный адаптер.

"Работа с двумя картами Ethernet" в http://www.codeguru.com/forum/showthread.php?t=448863

"Странное поведение привязки на многочленных системы" в http://www.codeguru.com/forum/showthread.php?t=452368

Надеюсь, что это поможет!