LINUX.ORG.RU

отключить или обойти кэширование данных по отправке по TCP/IP


0

0

Привет,

написал небольшой telnet сервер. Добился того, что в режиме char-by-char сервер нормально общается и с bsd шным клиентом и telnet клиентом от microsoft. char-by-char значит, что то, что нажимается на клавиатуре передается клиентом серверу байт за байтом без задержек (один tcp пакет на символ). Это в теории. На самом деле похоже на то, что windows кеширует отправку. Похоже отправляемые символы накапливаются в стеке и если некоторое время больше не поступает данных, то накопленные отправляются.

Чем медленне набирать, тем больше задержка перед отправкой, до трех секунд.

Ах да, когда сервер получает байт с данными, то он его отправляет клиенту обратно и только тогда тот показывает его на экране. Я вроде нашел, что то про ACK, типа сервер должен посылать aknowledge сообщение на счет принятых данных и чем быстрее будет приходить этот ack event до клиента, тем меньше будет кэширование.

Я пробовал после приема символов отправлять ACK(0x06), но телнет клиенты пытаются его отображать.

Вообщем как отключить кэширование?

Никто такими вещами не занимался?

Спасибо

ACK - это флаг установленный в заголовке TCP пакета, а не символ в блоке данных, т.е. тебе нужно самому собирать TCP/IP пакет (для этого используются сокеты типа RAW_SOCKET, например) если хочется самому контролировать обмен SYN/ACK флагами. Про кэширование честно говоря не помню, но это есть в мануалах (покопай man socket).

anonamoz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.