2015-03-03 4 views
0

У меня есть несколько приложений, отправляющих многоадресные сообщения по нескольким каналам. Большинство каналов публикуют несколько тысяч сообщений в секунду. На канале, с которым у меня возникают проблемы (хотя это, вероятно, влияет и на других), публикует около 8 тыс. Сообщений в верхней части каждой минуты. В большинстве случаев все сообщения поступают. Иногда некоторые или многие из них отсутствуют на уровне приложения, но Wireshark захватывает их (исключая проблемы с сетью/отправкой). Я не верю, что это приложение по двум причинам: 1) У меня два полностью независимых приложения, написанных на C++, а другой на C# без общего кода. Оба приложения всегда получают/пропускают одни и те же сообщения. 2) Те же самые два приложения, когда они запускаются на том же сервере, который публикуется, не пропускают никаких сообщений. Так что что-то кажется нецелесообразным между NIC и приложением, то есть ОС. Использование сети и процессора незначительно (~ 5%).Отсутствие многоадресных сообщений в Windows 2008 R2

Мы применили патч, описанный здесь, http://support.microsoft.com/kb/2639824, без успеха.

Любые мысли были бы весьма благодарны.

+0

окна могут упаковывать пакеты UDP без уведомления приложения. Вы можете попробовать такие вещи, как увеличение размера буфера, отдельный поток для чтения и т. Д. Но если все это не сработает, вы можете использовать winpcap для захвата вашего многоадресного потока, так же, как использует wirehark .... – wimh

+0

Я уже использую большой размер буфера, достаточно большой, чтобы захватить все сообщения. И я использую IOCP в своем приложении на C++, а C# (я думаю) использует его под обложками. Приложение C# копирует данные в буфер (из пула byte []) и толкает его в очередь для обработки другого потока). Таким образом, больше потоков не поможет. Не использовали winpcap. Это похоже на метод обхода ОС. Верный? –

+0

Да, используя winpcap, обход ОС. Обратите внимание, что вам все равно потребуется ОС для подписки на поток многоадресной рассылки. – wimh

ответ

0

После дальнейшего изучения решение найдено. Во-первых, я обнаружил, что одно из моих предположений (что Wireshark видел, что пакеты и мое приложение не было) оказалось ложным. Поскольку Wireshark также не хватало пакетов, проблема должна существовать вверх по течению, начиная с NIC. После отключения режима прерывания на сетевом адаптере проблема была решена.

Смежные вопросы