Var*_*gas 7 sockets windows udp windows-7 onresume
我有一个UDP套接字侦听端口进行广播传输,它工作正常.
然而,当我休眠和恢复的操作系统(Windows 7),插座只是停止receving数据(我可以看到,有数据使用Wireshark的到达).
如果我更改任何网络设置,例如,更改我的IP地址,禁用和启用网络适配器,也会发生这种情况.
操作系统似乎在休眠时禁用所有网络适配器,并在恢复时重新启用它们.
select只返回0(超时),这与我没有收到任何数据时没有什么不同.我无法在任何地方找到任何对此行为的引用.
如果我关闭套接字并重新创建它,它将再次开始工作.
恢复操作系统后,我的TCP侦听套接字仍然正常工作.
关于如何检测和纠正这种情况的任何想法?
编辑:它仍然直接接收地址数据就好了,它只是不再接收brodcast传输.
EDIT2:刚刚发现如果我写入套接字(向任何地方发送一个虚拟数据包)它再次开始工作......
小智 2
我认为您的代码没有显式地将套接字绑定到“0.0.0.0”地址。因此,当您执行sentto时,它会绑定当时可用的接口IP。当此 IP 更改或接口被禁用时,TCP/IP 堆栈将重置此套接字。在您的 TCP 套接字中,您应该绑定到“0.0.0.0”地址,以便它将始终侦听连接,而与任何 IP/接口更改无关。在发送任何数据之前,您可以将 udp 套接字也绑定到“0.0.0.0”。这将使其即使在休眠或 IP 更改后也能正常工作。