我们最近观察到显示以下症状的罕见 UDP 通信问题:
- 套接字
sendto()
调用失败并出现错误WSAENOBUFS (10055) - 尽管 Wireshark 显示网络接口实际上收到了预期的数据报,但对该套接字的后续
recvfrom()
调用不会收到任何内容。这种情况持续大约 8 秒,之后可以再次从套接字接收新的传入数据报。 - 在 Windows 系统日志中,出现错误时出现了内核常规信息条目
sendto()
:The access history in hive \??\C:\ProgramData\Microsoft\Provisioning\Microsoft-Desktop-Provisioning-Sequence.dat was cleared updating 0 keys and creating 0 modified pages.
该问题发生在运行 Microsoft Windows 10 Pro for Workstations 版本 10.0.17763 Build 17763 的客户系统上。
在该系统上,我们能够通过一个用 C++ 编写的简单测试程序来重现该问题,该程序与 UDP 数据报相呼应。我们验证了从套接字接收的线程实际上一直在响应,通过使用 指定 1 秒的超时SO_RCVTIMEO
,打印一些“仍然活着”的输出并立即recvfrom()
再次调用。
在我们自己的测试系统上,我们无法在与客户相同的情况下观察到问题。但是,当测试运行时,我们可以在使用网络适配器设置时产生类似的效果。启用会Microsoft LLDP Protocol Driver
显示sendto()
错误,有时还会导致 8 秒的“静默”期,但没有任何 Windows 系统日志条目。
非常感谢任何提示。