Ofi*_*fir 20 sockets windows networking binding bind
除了更改路由表之外,Windows中是否有可靠的方法来强制新创建的套接字使用特定的网络接口?据我所知,bind()接口的IP地址并不能保证这一点.
Ezz*_*Ezz 18
(好的第二次幸运..)
仅供参考,这里有另一个问题,在同一行上的特定网络适配器上执行connect() ...
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
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
24385 次 |
| 最近记录: |