You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
From [tcp](https://man7.org/linux/man-pages/man7/tcp.7.html) man page:
```
TCP_FASTOPEN_CONNECT (since Linux 4.11)
This option enables an alternative way to perform Fast
Open on the active side (client). When this option is
enabled, connect(2) would behave differently depending on
if a Fast Open cookie is available for the destination.
If a cookie is not available (i.e. first contact to the
destination), connect(2) behaves as usual by sending a SYN
immediately, except the SYN would include an empty Fast
Open cookie option to solicit a cookie.
If a cookie is available, connect(2) would return 0
immediately but the SYN transmission is deferred. A
subsequent write(2) or sendmsg(2) would trigger a SYN with
data plus cookie in the Fast Open option. In other words,
the actual connect operation is deferred until data is
supplied.
Note: While this option is designed for convenience,
enabling it does change the behaviors and certain system
calls might set different errno values. With cookie
present, write(2) or sendmsg(2) must be called right after
connect(2) in order to send out SYN+data to complete 3WHS
and establish connection. Calling read(2) right after
connect(2) without write(2) will cause the blocking socket
to be blocked forever.
The application should either set TCP_FASTOPEN_CONNECT
socket option before write(2) or sendmsg(2), or call
write(2) or sendmsg(2) with MSG_FASTOPEN flag directly,
instead of both on the same connection.
Here is the typical call flow with this new option:
s = socket();
setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
connect(s);
write(s); /* write() should always follow connect()
* in order to trigger SYN to go out. */
read(s)/write(s);
/* ... */
close(s);
```
0 commit comments