将connect()调用替换为带有MSG_FASTOPEN的sendto()不会启动TCP Fast Open连接。SYN数据包中没有用于快速打开或数据的TCP选项,它只是执行常规的TCP SYN。
发布于 2018-10-30 04:28:28
必须在套接字上设置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_FASTOPEN_CONNECT会通知内核您的进程愿意尝试TCP fast-open。
https://stackoverflow.com/questions/53053340
复制相似问题