2010-01-14 78 views

回答

15

(好第二次幸运..)

FYI这里有一个问题perform connect() on specific network adapter沿着相同的路线...

根据The Cable Guy

的Windows XP和Windows Server 2003 使用弱主机模式发送和接收所有IPv4接口和 强主机模式发送和 接收所有IPv6接口。您 不能配置此行为。在 Windows Vista中的 下一代TCP/IP堆栈和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下可能不会出现问题 。但之前的所有版本的Windows都使用弱E/S 模式。

与弱E/S模式,它是决定哪些卡 是在 多宿主系统用于传出流量 路由表。

看看这些线程提供了一些 见解:

“在Windows XP多宿主 主机上的本地套接字绑定不起作用”在 http://www.codeguru.com/forum/showthread.php?t=452337

“如何将一个端口连接到指定的 Networkcard ?”在 http://www.codeguru.com/forum/showthread.php?t=451117。 此线程提到 CreateIpForwardEntry()函数,它 (我认为)可以使用,以便与指定 服务器的所有 传出IP流量是通过指定 适配器路由创建路由表的 项。

http://www.codeguru.com/forum/showthread.php?t=452368

希望帮助 “在多宿主 系统奇怪的行为,结合” “有2个以太网卡工作” 在 http://www.codeguru.com/forum/showthread.php?t=448863

+0

谢谢, 除非我错过了一些东西,否则答案都不相关,因为SO_BINDTODEVICE与Windows无关。 虽然我没有证据,但我怀疑你的总结是正确的。 – Ofir 2010-01-18 11:56:56

+0

哎呀,你是!以更好的信息更新了我的答案 - 对不起! – Ezz 2010-01-18 16:18:22

+0

请注意,弱主机和强主机模型不会影响从套接字发送的流量的路由。即强大的主机模型可确保离开网络适配器的流量使用该适配器分配的IP地址,但不会影响主机本身的网络堆栈如何选择要实际使用的出站适配器。这实际上在上面的“The Cable Guy”链接以及维基百科上进行了解释:https://en.wikipedia.org/wiki/Host_model – 2016-02-09 08:22:32