Nehmen wir an, Sie verwenden TCP. Wenn Sie send senden, werden die Daten, die Sie senden, sofort in die ausgehende Warteschlange gestellt, und send wird dann erfolgreich abgeschlossen. Wenn send jedoch nicht in der Lage ist, die Daten in die ausgehende Warteschlange zu stellen, wird send mit einem Fehler zurückgegeben.
Da es sich bei Tcp um ein garantiertes Übertragungsprotokoll handelt, können die Daten in der ausgehenden Warteschlange nur entfernt werden, wenn das entfernte Ende eine Bestätigung erhalten hat. Dies liegt daran, dass die Daten möglicherweise erneut gesendet werden müssen, wenn keine Bestätigung rechtzeitig empfangen wurde.
Wenn das Remote-Ende träge ist, wird die ausgehende Warteschlange mit Daten gefüllt und das Senden wird dann blockiert, bis Platz vorhanden ist, um die neuen Daten in der ausgehenden Warteschlange zu platzieren.
Die Verbindung kann jedoch so ausfallen, dass keine weiteren Daten mehr gesendet werden können. Obwohl nach dem Schließen einer TCP-Verbindung weitere Übertragungen zu einem Fehler führen, kann der Benutzer nicht wissen, wie viele Daten tatsächlich zur anderen Seite geführt haben. (Ich kenne keine Möglichkeit, die TCP-Buchhaltung von einem Socket in die Benutzeranwendung zurückzuholen). Wenn daher eine Bestätigung des Datenempfangs erforderlich ist, sollten Sie dies wahrscheinlich auf Anwendungsebene implementieren.
Für UDP, ich denke, es versteht sich von selbst, dass eine Art und Weise der Berichterstattung, was oder nicht erhalten wurde, ein Muss ist.
Was ist der Protokolltyp des Sockets? TCP, UDP, etwas anderes? – torak
Ich benutze TCP-Protokoll – Giann