gpt4 book ai didi

windows - UDP 监听套接字在网络配置更改后停止监听

转载 作者:可可西里 更新时间:2023-11-01 13:27:25 31 4
gpt4 key购买 nike

我有一个 UDP 套接字在端口中监听广播传输,它工作正常。

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

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

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

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

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

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

关于如何检测和纠正这种情况有什么想法吗?

编辑:它仍然可以很好地直接接收地址数据,只是不再接收广播传输。

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

最佳答案

我认为您的代码没有明确地将套接字绑定(bind)到“0.0.0.0”地址。因此,当您执行 sentto 时,它会绑定(bind)当时可用的接口(interface) IP。当此 IP 更改或接口(interface)被禁用时,此套接字将由 TCP/IP 堆栈重置。在您的 TCP 套接字中,您应该绑定(bind)到“0.0.0.0”地址,以便它始终监听独立于任何 IP/接口(interface)更改的连接。在发送任何数据之前,您可以让您的 udp 套接字也绑定(bind)到“0.0.0.0”。这将使它即使在休眠或 IP 更改后也能正常工作。

关于windows - UDP 监听套接字在网络配置更改后停止监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755434/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com