У меня есть несколько приложений, отправляющих многоадресные сообщения по нескольким каналам. Большинство каналов публикуют несколько тысяч сообщений в секунду. На канале, с которым у меня возникают проблемы (хотя это, вероятно, влияет и на других), публикует около 8 тыс. Сообщений в верхней части каждой минуты. В большинстве случаев все сообщения поступают. Иногда некоторые или многие из них отсутствуют на уровне приложения, но Wireshark захватывает их (исключая проблемы с сетью/отправкой). Я не верю, что это приложение по двум причинам: 1) У меня два полностью независимых приложения, написанных на C++, а другой на C# без общего кода. Оба приложения всегда получают/пропускают одни и те же сообщения. 2) Те же самые два приложения, когда они запускаются на том же сервере, который публикуется, не пропускают никаких сообщений. Так что что-то кажется нецелесообразным между NIC и приложением, то есть ОС. Использование сети и процессора незначительно (~ 5%).Отсутствие многоадресных сообщений в Windows 2008 R2
Мы применили патч, описанный здесь, http://support.microsoft.com/kb/2639824, без успеха.
Любые мысли были бы весьма благодарны.
окна могут упаковывать пакеты UDP без уведомления приложения. Вы можете попробовать такие вещи, как увеличение размера буфера, отдельный поток для чтения и т. Д. Но если все это не сработает, вы можете использовать winpcap для захвата вашего многоадресного потока, так же, как использует wirehark .... – wimh
Я уже использую большой размер буфера, достаточно большой, чтобы захватить все сообщения. И я использую IOCP в своем приложении на C++, а C# (я думаю) использует его под обложками. Приложение C# копирует данные в буфер (из пула byte []) и толкает его в очередь для обработки другого потока). Таким образом, больше потоков не поможет. Не использовали winpcap. Это похоже на метод обхода ОС. Верный? –
Да, используя winpcap, обход ОС. Обратите внимание, что вам все равно потребуется ОС для подписки на поток многоадресной рассылки. – wimh