Winsock下罕见的sendto()/ recvfrom()问题的原因?

问题描述 投票:0回答:1

我们最近观察到了罕见的UDP通信问题,这些问题显示以下症状:

  1. 套接字sendto()调用失败,并出现错误WSAENOBUFS(10055)
  2. 此套接字上的后续recvfrom()调用不会收到任何信息,即使Wireshark显示网络接口实际上已收到了预期的数据报。这种情况持续了大约8秒钟,之后new可以再次从套接字接收传入的数据报。
  3. 在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 Workstation版本10.0.17763 Build 17763的客户系统上。

在该系统上,我们可以用一个用C ++编写的简单测试程序来重现该问题,该程序可以回显UDP数据报。我们通过使用SO_RCVTIMEO指定1秒钟的超时,打印一些“仍然存在”的输出并立即再次调用recvfrom(),来验证从套接字接收的线程实际上一直在响应。

在我们自己的测试系统上,我们无法在与客户相同的情况下观察到该问题。但是,当测试运行时,在使用网络适配器设置时,我们能够引起类似的效果。启用Microsoft LLDP Protocol Driver会显示sendto()错误,有时还会导致8秒钟的“静默”时间,但没有任何Windows系统日志条目。

非常感谢任何提示。

[我们最近观察到了罕见的UDP通信问题,这些问题显示以下症状:套接字sendto()调用失败,错误为WSAENOBUFS(10055)此套接字上的后续recvfrom()调用没有...

windows udp winsock sendto recvfrom
1个回答
0
投票

自Windows 10 1809起,此问题似乎与Microsoft Provisioning Tool有关。

© www.soinside.com 2019 - 2024. All rights reserved.