From: Sergey Matveev Date: Thu, 16 Nov 2023 13:03:11 +0000 (+0300) Subject: Попробовал TCP Fast Open X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=0569bd4a712d92a33ed743ab8ed90008a95beef5;p=stargrave-blog.git Попробовал TCP Fast Open о котором узнал в 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, но он в это время уже считает Диффи-Хельмана. ---