Как я могу установить размер буфера для нижнего сокета UDP? C #

Как мы знаем для получения UDP, мы используем Socket.ReceiveFrom или UdpClient.receive

Socket.ReceiveFrom принимает от вас байтовый массив для помещения данных udp.

UdpClient.receive возвращает непосредственно байтовый массив, в котором находятся данные

Мой вопрос заключается в том, как установить размер буфера внутри сокета. Я думаю, что ОС поддерживает свой собственный буфер для приема данных UDP, верно? например, если пакет udp отправляется на мою машину, ОС поместит его в буфер и будет ждать нас до Socket.ReceiveFrom или UdpClient.receive, верно?

Как я могу изменить размер этого внутреннего буфера?

Я пробовал Socket.ReceiveBuffSize, он никак не влияет на UDP, и он четко сказал, что это для окна TCP. Также я провел много экспериментов, которые доказывают, что Socket.ReceiveBufferSize НЕ для UDP.

Кто-нибудь может поделиться некоторыми взглядами на внутренний буфер UDP ???

Спасибо

Я видел несколько сообщений здесь, например,

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a

Дейв сказал, что Socket.ReceiveBufferSize может установить внутренний буфер для UDP. Я не согласен.

Эксперимент, который я провел, выглядит так:

27 хостов одновременно отправляют мне пакет по 10 КБ в локальной сети (по крайней мере, почти). У меня есть цикл while для обработки каждого пакета. Для каждого пакета я создаю поток и обрабатываю его. Я использовал UdpClient или Socket для получения пакетов.

Я потерял около 50% пакетов. Я думаю, что это взрыв UDP, и я не могу обработать их все вовремя.

Вот почему я хочу увеличить размер буфера для UDP. скажем, если я изменю размер буфера на 1 МБ, то 27 * 10 КБ = 270 КБ данные могут быть приняты в буфере, верно?

Я попытался изменить Socket.ReceiveBufferSize на множество значений, и он просто не имеет никаких эффектов.

Кто-нибудь может помочь?

Ответы на вопрос(2)

Ваш ответ на вопрос