.splittcppackets - свойство
| Назначение: | Для текущего выбранного сокета (выбор выполняется через sock.num) определяет, получит ли программа дополнительный контроль над размером принимаемых и передаваемых TCP-пакетов. |
| Тип: | Enum (yes_no, byte) |
| Диапазон значений: |
|
| См. также: | Режим «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.