sendto忽略MSG_FASTOPEN标志

时间:2018-10-29 20:28:28

标签: tcp network-programming

connect()替换为sendto()的{​​{1}}呼叫不会启动TCP快速打开连接。 SYN数据包中没有用于快速打开的TCP选项,也没有数据,它只是执行常规的TCP SYN。

1 个答案:

答案 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快速打开。