From 0569bd4a712d92a33ed743ab8ed90008a95beef5 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 16 Nov 2023 16:03:11 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=BE=D0=B1=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BB=20TCP=20Fast=20Open?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit о котором узнал в 88ce198f30f60b4201e7ccc142d9942fa8104412. Глядя на исходный код cURL и GnuTLS, в которых есть его поддержка, оказалось, что они только для GNU/Linux или macOS. Видимо, когда был hype на эту тему, то в macOS оно раньше появилось. Вообще просто так его включить то не сложно: setsockopt(sock, IPPROTO_TCP, TCP_FASTOPEN, ...). Но посылки данных с первыми SYN-ами конечно не будет. Для этого надо делать не connect(), а sendto(sock, ...). Что не всегда тривиально легко сделать. У меня код подключения (connect()) и создания сокета были совмещены в одной функции. После которой и всякий Capsicum включался, который sendto и setsockopt не даст выполнить просто так. В общем, немного порефакторить пришлось код. Данные от сервера же могут не пойти с первым SYN+ACK если успеет сработать таймер на delayed ACK. Но в трафике теперь видно что handshake сообщение от клиента идёт с первым пакетом, тогда как от не быстрого сервера приходит SYN+ACK, SYN, но он в это время уже считает Диффи-Хельмана. -- 2.50.0