UDP侦听套接字在网络配置更改后停止侦听

时间:2011-10-13 14:10:37

标签: windows sockets windows-7 udp onresume

我有一个UDP套接字侦听端口进行广播传输,它工作正常。

然而,当我休眠并恢复操作系统(Windows 7)时,套接字只是停止接收数据(我可以看到有数据到达使用Wireshark)。

如果我更改任何网络设置,例如更改我的IP地址,禁用和启用网络适配器,也会发生这种情况。

操作系统似乎在休眠时禁用所有网络适配器,并在恢复时重新启用它们。

select只返回0(超时),这与我没有收到任何数据时没有什么不同。我无法在任何地方找到任何对此行为的引用。

如果我关闭套接字并重新创建它,它就会重新开始工作。

恢复操作系统后,我的TCP侦听套接字仍然正常工作。

有关如何检测和纠正这种情况的任何想法?

编辑:它仍然直接接收地址数据,它只是不再接收brodcast传输。

EDIT2:刚刚发现,如果我写入套接字(向任何地方发送虚拟数据包),它会再次开始工作......

1 个答案:

答案 0 :(得分:1)

我认为您的代码没有明确地将套接字绑定到“0.0.0.0”地址。因此,当您发送到它时,它会绑定当时可用的接口IP。更改此IP或禁用接口时,TCP / IP堆栈将重置此套接字。在您的TCP套接字中,您应该绑定到“0.0.0.0”地址,这样它将始终监听连接,而不受任何IP /接口更改的影响。在发送任何数据之前,您可以使您的udp套接字也绑定到“0.0.0.0”。这样即使在休眠或IP更改后也能正常工作。