Состояние памяти буферов 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).