boost :: asio :: async_write, schreibt Daten größer als 65536 Bytes

8

Ich versuche, JPEG-Frames über einen Socket an einen Client mit async_write() zu schreiben. Ich habe den Boost asynchronen TCP-Tagesserver als Beispiel verwendet ein Startpunkt.

%Vor%

Ich habe die Methode geändert, die async_write() wie folgt ausführt:

%Vor%

Beim Lesen einer großen Datei vom Server mit einem Client schreibt der Server nur maximal 65536 Bytes. Wenn ich den Aufruf boost::asio::async_write() durch einen synchronen Aufruf boost::asio::write() ersetze, wird die korrekte Anzahl Bytes an den Client übertragen.

Ich nehme an, meine Frage ist, wie kann ich mehr als 65536 Bytes mit boost::asio::async_write() senden? Jede Hilfe würde sehr geschätzt werden.

    
Jeff Barnes 24.02.2012, 14:50
quelle

1 Antwort

9

Ein Problem ist, dass die Verwendung der async_write -Funktionsdaten nicht sofort von der Funktion gesendet wird, sondern einige Zeit nachdem die start -Methode beendet ist und die lokale message_ -Variable zerstört wird und% boost::asio::buffer kopiere den Inhalt von message_ nicht. Es speichert nur einen Verweis darauf. Das Ergebnis ist unvorhersehbar. Möglicherweise ist die Übertragung von 65536 Bytes das Ergebnis dieses Verhaltens.

    
megabyte1024 24.02.2012, 15:24
quelle

Tags und Links