在Windows中为套接字使用特定的networking接口

除了更改路由表之外,Windows中是否有可靠的方法来强制新创build的套接字使用特定的networking接口? 我明白bind()到接口的IP地址并不能保证这一点。

(好的第二次幸运..)

仅供参考,还有一个问题在这里执行连接()在特定的网络适配器沿着相同的线路…

据有线人士说

Windows XP和Windowsserver®2003使用弱主机模式为所有IPv4接口发送和接收,并为所有IPv6接口发送和接收强主机模式。 您不能配置此行为。 Windows Vista和Windows server 2008中的下一代TCP / IP堆栈支持在除Teredo主机特定中继的Teredo隧道接口以外的所有接口上默认接受IPv4和IPv6的强大主机。

所以要回答你的问题(正确的,这次)在Windows XP和Windows server 2003 IP4没有,但对于IP6是的。 而对于Windows Vista和Windows 2008是的(某些情况除外)。

同样来自http://www.codeguru.com/forum/showthread.php?t=487139

在Windows上,对bind()的调用仅影响卡片选择传入流量,而不影响传出流量。 因此,在多宿主系统中运行的客户端(即,多于一个接口卡),网络堆栈选择要使用的卡,并且仅基于目的地IP进行选择,而目的地IP又是基于在路由表上。 bind()调用不会以任何方式影响卡的选择。

这与“弱端系统”(“弱E / S”)模型有关。 Vista更改为强大的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个以太网卡”, 网址为http://www.codeguru.com/forum/showthread.php?t=448863

“在多宿主系统上的奇怪的绑定行为”在http://www.codeguru.com/forum/showthread.php?t=452368

希望有所帮助!