boost::asio::streambuf commit/consume



  • Hallo liebes Forum-Team!

    Ich beschäftige mich z.Z. mit boost::asio und bin auf die Klasse boost::asio::streambuf gestoßen. Allerdings verstehe ich einige Internals von ihr nicht.

    Sowie ich es verstanden habe, beinhaltet boost::asio::streambuf 2 Sequenzen, die Input-Sequenz und die Output-Sequenz. Und hier die Fragen, die sich mir nun stellen:

    [*] Es führt zu UB, wenn ich auf einen Buffer mehrere unterschiedliche (Read- & Write-Operationen) Operationen gleichzeitig laufen lasse, weil die eine Operation den Buffer ändern will und die andere Operation den Buffer lesen will (Wenn ich kein strand verwende). Wie sieht das aber nun im Bezug auf boost::asio::streambuf aus? Dieser hat ja 2 unterschiedliche Buffer (Output und Input). Darf ich da Read- & Write-Operationen gleichzeitig auf ein boost::asio::streambuf Objekt ausführen?

    [] Was ist der Sinn dieser Methode boost::asio::streambuf::commit? Von der Dokumentation werde ich so gar nicht schlau daraus:Move characters from the output sequence to the input sequence.* Natürlich hat die Funktionen einen Sinn, aber dieser offenbart sich mir noch nicht. Wieso will ich das "Geschriebene" (i.e. Output-Sequenz) in das "Gelesene" (Input-Sequenz) schieben? (Siehe Kommentar im Beispiel)

    boost::asio::streambuf b;
    
    // reserve 512 bytes in output sequence
    boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);
    
    size_t n = sock.receive(bufs);
    
    // received data is "committed" from output sequence to input sequence // WIESO?
    b.commit(n);
    
    std::istream is(&b);
    std::string s;
    is >> s;
    

    Hoffe jemand, der sich mit I/O Streams auskennt bzw. die Antwort auf meine Fragen hat, kann mir weiterhelfen.


Anmelden zum Antworten