2016-10-28 5 views
0

Wenn wir ein Paket senden und die Übertragung erneut startet, kommen wir aus der Sendefunktion oder nicht? In meinem Fall nahm meine Anwendung eine Sperre und wartet auf Senden zurück und dann verlässt es das Schloss.TCP senden Funktion Retransmission Logik?

Aber in meinem Szenario kam es nie zurück. Ich möchte wissen, ob wir wirklich aus der Sendefunktion kommen, wenn wir einen Re-Transmission-Fall haben?

Antwort

2

Die Sendefunktion überträgt Daten in den Socket-Sendepuffer und blockiert, solange nicht genug Platz ist.

Daten werden aus dem Sendepuffer des Sockets entfernt, wenn sie bestätigt werden.

Die Neuübertragung beginnt, wenn Daten, die an den Peer gesendet wurden, nicht innerhalb des entsprechenden Timeout-Intervalls bestätigt wurden.

Die Wechselwirkungen zwischen Neuübertragung und der send() Funktion bestehen im wesentlichen aus: wenn Daten nicht bestätigt worden sind, ist es immer noch in dem Sendepuffer, der die Funktion zum Block send() verursachen kann.