2010-01-14 73 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