我編寫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