.splittcppackets - свойство

Назначение:Для текущего выбранного сокета (выбор выполняется через sock.num) определяет, получит ли программа дополнительный контроль над размером принимаемых и передаваемых TCP-пакетов.
Тип:Enum (yes_no, byte)
Диапазон значений:
  • 0 - NO (по умолчанию): обычная обработка TCP-данных, при которой программе не важен размер отдельных принимаемых и передаваемых TCP-пакетов.
  • 1 - YES: включаются дополнительные возможности, позволяющие программе узнавать размер каждого входящего TCP-пакета, а также управлять размером каждого исходящего TCP-пакета.
См. также:Режим «Split Packet» при обработке TCP-данных

Подробности

Когда это свойство равно 1 - YES, программа получает дополнительный контроль над TCP. Для входящих TCP-данных программа может узнавать размер отдельных входящих пакетов (о нём сообщает событие on_sock_tcp_packet_arrival).

Для исходящих TCP-данных пакет не отправляется вовсе, если нельзя отправить сразу всё содержимое буфера передачи (TX). Поэтому, выполнив sock.send и дождавшись sock.txlen = 0, программа может быть уверена, что отправленный пакет имеет именно тот размер, который нужен.

Свойство имеет смысл только при sock.inbandcommands = 0 - NO. Если inband-команды включены, сокет всегда работает так, как будто sock.splittcppackets = 0 - NO. Программа не может изменить значение этого свойства, пока сокет не находится в состоянии простоя (sock.statesimple <> 0 - PL_SSTS_CLOSED).

Учтите, что отправка TCP-данных с ожиданием sock.txlen = 0 заметно снижает пропускную способность передачи, поскольку каждая отправка ждёт подтверждения приёма данных от другой стороны.

Кроме того, при sock.splittcppackets = 1 - YES следите, чтобы объём отправляемых данных не превышал размер буфера приёма (RX) на другой стороне. Иначе данные не пройдут вообще: ваша сторона будет ждать возможности отправить все данные TX разом, а другая сторона не сможет принять такой объём за один раз.

Также попытка отправить пакет, размер которого превышает «максимальный размер сегмента» (MSS), заданный другой стороной, приведёт к фрагментации данных! Сокет никогда не отправляет TCP-пакет с объёмом данных больше MSS.

Внимание

Не включайте перенаправление буфера для сокета, использующего шифрование TLS.

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