[О блоге] [наверх] [пред] [2023-11-16 16:03:11+03:00] [0569bd4a712d92a33ed743ab8ed90008a95beef5]

Попробовал 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, но он в это время уже считает
Диффи-Хельмана.

    [оставить комментарий]