Ich schreibe ein TCP-Client auf einem Rechner Linux 3.15, die die Verwendung von TCP Schnell Öffnen ist in der Lage:Wie kann ich wissen, ob sendto() mit TCP Fast Open tatsächlich Fast Open verwendet?
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));
Mit tcpdump, kann ich das Senden der TCP Fast Open Option überprüfen und, dass sie die 3 nicht umgehen -Way Handshake (getestet mit Googles Servern).
mit Servern jedoch die tut nicht TCP akzeptieren schnell offen, SENDTO noch erfolgreich ist, und die Meldung „TFO Verbindung erfolgreich“ angezeigt wird. Offenbar fällt der Linux-Kernel-Code auf reguläres TCP zurück, wenn der Server TCP Fast Open nicht unterstützt (wieder mit tcpdump geprüft).
Wie finde ich heraus, ob meine Verbindung TCP Fast Open verwendet oder nicht?
Wenn Sie wirklich wollen, können Sie Raw Sockets Ihr TCP-Verbindung zu öffnen, verwenden können. – dari
Der Punkt von sendto() ist, * die Daten * zu senden. Wenn Sie möchten, dass es provisorisch ist, wenn Sie die Verbindung schnell öffnen, müssen Sie Ihre eigenen rollen. Aber warum? –
Warum kümmert es dich? Wenn die Nachricht zu beiden Arten von Servern durchkommt, ist Ihre Arbeit sicher beendet? – EJP