Usar una interfaz de red específica para un socket en windows

¿Existe una forma confiable en Windows, además de cambiar la tabla de enrutamiento, para forzar a un socket recién creado a usar una interfaz de red específica? Entiendo que bind() a la dirección IP de la interfaz no lo garantiza.

    (Ok segunda vez suerte …)

    FYI hay otra pregunta aquí realice connect () en un adaptador de red específico en la misma línea …

    De acuerdo con The Cable Guy

    Windows XP y Windows Server® 2003 utilizan el modelo de host débil para envíos y recepciones para todas las interfaces IPv4 y el modelo de host fuerte para envíos y recepciones para todas las interfaces IPv6. No puedes configurar este comportamiento. La stack Next Generation TCP / IP en Windows Vista y Windows Server 2008 admite fuertes envíos de host y recibe tanto para IPv4 como para IPv6 de forma predeterminada en todas las interfaces, excepto la interfaz de túnel Teredo para un retransmisor Teredo específico del host.

    Así que para responder a su pregunta (correctamente, esta vez) en Windows XP y Windows Server 2003 IP4 no, pero para IP6 sí. Y para Windows Vista y Windows 2008 sí (excepto en ciertas circunstancias).

    También desde http://www.codeguru.com/forum/showthread.php?t=487139

    En Windows, una llamada a bind () afecta la selección de la tarjeta solo del tráfico entrante, no del tráfico saliente. Por lo tanto, en un cliente que se ejecuta en un sistema multitarjeta (es decir, más de una tarjeta de interfaz), es la stack de red la que selecciona la tarjeta y su selección se basa únicamente en la IP de destino, que a su vez se basa en la tabla de enrutamiento Una llamada a bind () no afectará la elección de la tarjeta de ninguna manera.

    Tiene algo que ver con algo llamado modelo “Weak End System” (“Weak E / S”). Vista cambió a un fuerte modelo E / S, por lo que el problema podría no surgir en Vista . Pero todas las versiones anteriores de Windows usaban el modelo E / S débil.

    Con un modelo de E / S débil, es la tabla de enrutamiento la que decide qué tarjeta se usa para el tráfico saliente en un sistema de hosts múltiples.

    Vea si estos hilos ofrecen alguna información:

    “El enlace de socket local en el host de múltiples hosts en Windows XP no funciona” en http://www.codeguru.com/forum/showthread.php?t=452337

    “¿Cómo conectar un puerto a una tarjeta de red específica?” en http://www.codeguru.com/forum/showthread.php?t=451117 . Este hilo menciona la función CreateIpForwardEntry (), que (creo) se puede usar para crear una entrada en la tabla de enrutamiento para que todo el tráfico IP saliente con un servidor específico se enrute a través de un adaptador especificado.

    “Trabajar con 2 tarjetas Ethernet” en http://www.codeguru.com/forum/showthread.php?t=448863

    “Comportamiento de vinculación extraño en el sistema de varios hosts” en http://www.codeguru.com/forum/showthread.php?t=452368

    ¡Espero que ayude!