将connect()
替换为sendto()
的{{1}}呼叫不会启动TCP快速打开连接。 SYN数据包中没有用于快速打开的TCP选项,也没有数据,它只是执行常规的TCP SYN。
答案 0 :(得分:0)
套接字必须在MSG_FASTOPEN
调用上设置TCP_FASTOPEN_CONNECT
选项,以兑现sendto()
。
在MSG_FASTOPEN
调用之后,启用socket()
TCP_FASTOPEN_CONNECT
这是因为从未要求int sock = socket(AF_INET6, SOCK_STREAM, 0);
const int yes = 1;
setsockopt(sock, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, &yes, sizeof(yes));
不能为无法识别的选项返回失败,所以旧代码中的调用者可能会无意中将sendto
位置不正确,从而导致错误的两次写入。设置MSG_FASTOPEN
会通知内核您的进程愿意尝试TCP快速打开。