Verhalten der QTcpSocket::waitForBytesWritten?
Ich bin ein wenig verwirrt über das Verhalten von QTcpSocket::waitForBytesWritten()
...
Bis Wann wird diese Funktion blockieren?
- Bis die Daten geschrieben, um die OS-internen Puffer für die übertragung über TCP?
- Bis die Daten physikalisch umgewandelt TCP-Pakete und gesendet?
- Bis die gesamten Daten übertragen und die remote-client erkennt an, dass alle Pakete empfangen wurden?
Sah ich die Dokumentation, aber es schien nicht sehr klar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Generell Betriebssysteme bieten nur einfache APIs für die erste Frage - da Qt ist eine portable API, es ist am besten, nur verlassen sich auf Sie bezieht, um die übertragung der OS-Puffer. Wenn Sie eine tatsächliche Bestätigung des Eingangs, es ist am besten, um es geschickt durch die remote-Anwendung, nachdem alle, können Sie die Daten ack D von der Fernbedienung, aber nie Lesen Sie die Fernbedienung auf die OS-Lesepuffer.
Wenn Sie brauchen, um zu vermeiden, dass der remote-Seite sperren, die Sie für immer, Sie sollten, statt zu warten, bis die
QIODevice::bytesWritten
signal und zurück in die event-Schleife, um andere Arbeit zu erledigen, oder einfach legen Sie eine entsprechende timeout. Im Allgemeinen, der remote-Seite kann immer blockieren Sie auf einer bestimmten Ebene - sprich, es kann sich weigern, ack, füllt sich das lokale OS-Puffer, an welcher Stelle schreibt, wird es nicht von Qt, um das Betriebssystem; egal, auf welcher EbenewaitForBytesWritten()
ist, kann Sie jederzeit gesperrt werden.Als solche
bytesWritten
undwaitForBytesWritten()
sollte nur verwendet werden, um Drossel, die Quelle der Daten - sprich, wenn man in einer engen Schleife übergeben 1G Daten in den socket alle auf einmal, Sie könnten am Ende die Pufferung in der Prozess-und der Speicherplatz aus. Durch Auslösung zusätzlicher liest/schreibt mit derbytesWritten
signal, können Sie dieses Problem vermeiden.