В последнее время мы наблюдаем редкие проблемы связи UDP, которые проявляются следующими симптомами:
- Сбой вызова
sendto()
с ошибкой WSAENOBUFS (10055) - Последующий вызов
recvfrom()
на этом сокете ничего не получает, хотя Wireshark показывает, что сетевой интерфейс действительно получил ожидаемые дейтаграммы. Эта ситуация сохраняется в течение приблизительно 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 для рабочих станций, версия 10.0.17763, сборка 17763.
В этой системе мы смогли воспроизвести проблему с помощью простой тестовой программы, написанной на C ++, которая повторяет дейтаграммы UDP. Мы убедились, что поток, получающий из сокета, действительно реагировал все время, указав время ожидания в 1 секунду, используя SO_RCVTIMEO
, напечатав некоторые «еще живые» выходные данные и немедленно снова вызвав recvfrom()
.
Вкл. В нашей собственной тестовой системе мы не смогли наблюдать проблему при тех же обстоятельствах, что и у клиента. Тем не менее, мы смогли вызвать аналогичные эффекты, когда играли с настройками сетевого адаптера во время выполнения теста. Включение Microsoft LLDP Protocol Driver
показало ошибку sendto()
и иногда также приводило к 8-секундному периоду молчания, но без записи в системном журнале Windows.
Любые советы приветствуются.