2012-01-09 2 views
1

У меня есть UdpClient, сидящий на порту. Я использую его для отправки данных.Буфер приема UdpClient. Когда он отбрасывает пакеты?

99% времени я не забочусь о входящих пакетах. Однако в редких случаях мне нужно услышать ответ от одного из моих отправленных пакетов.

Моя первая мысль заключается в простом вызове UdpClient.Recieve() прямо после отправки и прокрутки любых пакетов до тех пор, пока я не нахожу свой ответ.

Однако, мне интересно, как буфер приема работает в UdpClient. Поскольку я не обрабатываю любые принятые пакеты нормально, я предполагаю, что он должен буферизировать их, а затем выбросить их, когда буфер достигнет определенного размера. Я обеспокоен тем, что это отбрасывание может произойти сразу после моего ответа на провод, но до того, как мой вызов Recieve() выполнил.

Единственное решение, с которым я могу думать, постоянно обрабатывать все принятые пакеты асинхронно, но это кажется излишним для такой простой ситуации.

Кто-нибудь знает поведение буферизации UdpClient? (например, выбрасывает ли он весь буфер или только самые старые данные или что?). MSDN не дает никаких подробностей, которые я могу найти.

ответ

1

Сетевые драйверы будут использовать кольцевые буферы разного размера.

Ring Buffer: [Slot 1] [ Slot 2] [Slot 3] 
Incoming Data: AAAA BBBB CCCC DDDD EEEE FFFF 

Ring Buffer: [DDDD] [EEEE] [FFFF] 

Точный размер обычно зависит от водителя, но это не имеет отношения к вашему вопросу.

Вы должны быть в порядке, только цикл обработки RECV, когда вы действительно ожидаете ответа.

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

  • Нет связанных вопросов^_^