Как узнать, сколько данных находится в буфере отправки Socket - PullRequest
4 голосов
/ 01 августа 2011

Я могу сказать, сколько данных находится в приемном буфере Socket, вызвав Socket.IOControl(IOControlCode.DataToRead, null, outValue);

Есть ли эквивалент, чтобы сказать, сколько данных находится в буфере отправки Socket?

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

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

У сокета UDP нет буфера отправки.Значение параметра сокета SO_SNDBUF для UDP - это ограничение на размер дейтаграммы, которую вы можете отправить.Ядро обычно имеет очередь пакетов для каждого сетевого адаптера, но это объединено для всех протоколов, и нет никакого пользовательского API для запроса его размера.Уровень IP, а затем и оборудование, могут отбрасывать пакеты без вывода сообщений.TCP знает, как с этим справиться, UDP - нет.Поэтому, если .Net или какое-либо другое чудо Microsoft не имеет такой буферизации в пользовательских библиотеках, вам не повезло.

Обращение к получателям - сигнализировать отправителю о сброшенных пакетах, повторных запросах, переходе на TCPи т. д. Это также подразумевает наличие какой-либо последовательности от отправителя.

Надеюсь, это поможет.

0 голосов
/ 02 августа 2011

Можете ли вы проанализировать заголовок? Может быть информация о длине контента.

...