UdpClient приемный буфер.Когда он отбрасывает пакеты? - PullRequest
1 голос
/ 09 января 2012

У меня UdpClient сел на порт.Я использую его для отправки данных.

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

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

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

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

1 Ответ

1 голос
/ 09 января 2012

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

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

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

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

Вы можете работать только с циклом обработки RECV, когда вы фактически ожидаете ответа.

...