Существует ли надежный путь в Windows, кроме изменения таблицы маршрутизации, чтобы вынудить недавно созданный сокет использовать определенный сетевой интерфейс? Я понимаю это bind()
к IP-адресу интерфейса не гарантирует это.
(Хорошо, если повезёт второй раз...)
К вашему сведению, здесь выполняет соединение() на определённом сетевом адаптере по тем же самым линиям...
Согласно Кабельный парень
Windows XP и Windows Server® 2003 использовать слабую хост-модель для отправки и получает для всех IPv4 интерфейсов и сильная модель хозяина для отправки и получает для всех интерфейсов IPv6. Вы не может настроить такое поведение. Следующее поколение TCP/IP стека в Windows Vista и Windows Server 2008 поддерживает сильных хозяев посылает и получает как для IPv4, так и для IPv6 по по умолчанию на всех интерфейсах, кроме Тередо туннельный интерфейс для Реле Тередо, специфическое для хоста.
Итак, чтобы ответить на ваш вопрос (правильно, на этот раз) в Windows XP и Windows Server 2003 IP4, нет, но для IP6 да. А для Windows Vista и Windows 2008 да (за исключением определенных обстоятельств).
Также с http://www.codeguru.com/forum/showthread.php?t=487139
На Windows, вызов для привязки() затрагивает выбор карты только входящий трафик, а не исходящий трафик. Таким образом, на клиент, работающий в многодоменной системе (т.е. более одной интерфейсной карты), это сетевой стек, который выбирает карту, которую можно использовать, и она делает свою отбор исключительно на основе IP-адрес назначения, который, в свою очередь, основан на таблице маршрутов. Вызов функции bind() не повлияет на выбор карты в любом случае.
Это как-то связано с тем. что-то под названием "Система Слабого конца" ("Слабый E/S") модель. Виза изменилась на сильная модель E/S, так что вопрос может не возникает согласно Vista. Но все предыдущие версии 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-трафик с заданным сервер маршрутизируется через указанный адаптер.
"Работа с 2 картами Ethernet" на http://www.codeguru.com/forum/showthread.php?t=448863
"Странное связывающее поведение на многодомных система http://www.codeguru.com/forum/showthread.php?t=452368
Надеюсь, это поможет!