Состояние памяти буферов TX и RX

Пользоваться буфером эффективно, не зная его состояния, невозможно. Он переполняется? Можно ли добавить ещё данных? И так далее. Поэтому у каждого из буферов сокета есть свойства, позволяющие за ним следить.

Буфер RX

Полный размер буфера можно узнать из свойства только чтение sock.rxbuffsize. Сколько данных сейчас находится в буфере RX, показывает свойство только чтение sock.rxlen. По этим двум свойствам легко вычислить, сколько свободного места осталось в буфере RX, - хотя это не такая уж полезная величина (поэтому отдельного свойства для неё нет).

Обратите внимание: sock.rxlen возвращает полный текущий объём данных в буфере RX. В режиме TCP он совпадает с фактическим количеством данных в буфере. В режиме UDP же это значение включает заголовки, предшествующие каждой датаграмме в буфере RX, - то есть реальных данных в буфере меньше. Отдельное свойство только чтение, sock.rxpacketlen, возвращает длину реальных данных в той датаграмме UDP, которую вы сейчас обрабатываете.

Иногда буфер RX нужно очистить, не извлекая данные. В таких случаях пригодится метод sock.rxclear.

Буфер TX

Как и у буфера RX, у буфера TX есть свойство sock.txbuffsize, позволяющее узнать его размер.

У буфера TX есть два свойства только чтение, показывающие длину данных: sock.txlen и sock.newtxlen. Свойство sock.txlen возвращает общий объём данных, ожидающих отправки из буфера. Свойство sock.newtxlen возвращает объём данных, которые попали в буфер, но ещё не зафиксированы для отправки (данные фиксируются методом sock.send). Для UDP это, по сути, длина создаваемой датаграммы UDP.

Есть у буфера TX и свойство только чтение sock.txfree, которое напрямую показывает, сколько в нём осталось места.

Чтобы очистить буфер TX, ничего не отправляя, используйте метод sock.txclear. Учтите, что он работает только при закрытом сетевом соединении (sock.statesimple = PL_SSTS_CLOSED).

Исходный материал Tibbo обновлён 11 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке