Windows 7临时将本地网络的UDP数据包路由到默认网关

时间:2015-11-30 17:30:47

标签: sockets networking windows-7 udp ip

我在多宿主Windows 7计算机上运行Windows服务,通过UDP与本地网络上的计算机进行通信。这种方法很好,除了有时在Windows启动期间,网络流量暂时(30秒)被路由到默认网关,导致UDP数据包丢失。这种丢包不一定是个问题,但会导致应用程序的启动时间不必要地长。

服务使用INADDR_ANY绑定到套接字。现在,当我将其更改为绑定到控制网络NIC(192.168.32.1)的IP地址时,我没有发现问题。但是,我不明白为什么绑定在这种情况下很重要,而且我也不明白为什么问题只是暂时存在。你们有没有对此有解释?

除了我好奇地找到这个问题的根本原因之外,我还希望得到这个问题的答案,这样我就可以从我的代码中删除绑定到特定的IP地址。这将我的应用程序代码与网络布局分离。

网络详情:

  • 机器A,Windows 7,两个网卡:
    • NIC#1(分机网络):192.168.116.x / 23(DHCP),网关192.168.117.1
    • NIC#2(int network):192.168.32.1/26(已修复)
  • 机器B,VxWorks,一个NIC:
    • NIC#1(int network):192.168.32.16/26(DHCP,由机器A分配)

1 个答案:

答案 0 :(得分:0)

使用INADDR_ANY时,将套接字绑定到默认IP地址 - 接口地址最低的IP地址。从您描述的症状来看,似乎这个界面在启动期间尚未配置,这是有道理的。

问题是,为什么要将发送套接字绑定到任何地址。我想,send期间的隐式绑定应该对你好吗?