我编写Linux 3.15的机器,它是能够使用TCP快速打开一个TCP客户端:如何知道sendto()与TCP Fast Open实际使用Fast Fast?
status = sendto(sd, (const void *) data, data_len, MSG_FASTOPEN,
(const struct sockaddr *) hostref->ai_addr,
sizeof(struct sockaddr_in));
if (status < 0) {
fprintf(stderr, "sendto: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
fprintf(stdout, "TFO connection successful to %s\n",
text_of(hostref->ai_addr));
使用tcpdump的,我可以检查TCP快速打开选项的发送和它并绕过3通过握手(经过Google服务器测试)。
但是,对于服务器不是而是接受TCP快速打开,sendto仍然成功,并显示消息“TFO连接成功”。显然,如果服务器不支持TCP Fast Open(再次,使用tcpdump检查),则Linux内核代码会回退到常规TCP。
如何找出我的连接是否使用TCP Fast Open?
如果你真的想,你可以使用原始套接字来打开你的TCP连接。 – dari 2014-10-07 20:29:56
sendto()的要点是*发送数据*。如果你想在成功快速开通连接时成为临时的,那么你必须自己推出。但为什么呢? – 2014-10-07 20:34:22
你为什么在意?如果消息传递给两种服务器,那么你的工作是否完成? – EJP 2014-10-08 00:03:33