<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[boost::asio::streambuf commit&#x2F;consume]]></title><description><![CDATA[<p>Hallo liebes Forum-Team!</p>
<p>Ich beschäftige mich z.Z. mit boost::asio und bin auf die Klasse <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/streambuf.html" rel="nofollow">boost::asio::streambuf</a> gestoßen. Allerdings verstehe ich einige Internals von ihr nicht.</p>
<p>Sowie ich es verstanden habe, beinhaltet <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/streambuf.html" rel="nofollow">boost::asio::streambuf</a> 2 Sequenzen, die Input-Sequenz und die Output-Sequenz. Und hier die Fragen, die sich mir nun stellen:</p>
<p>[*] Es führt zu UB, wenn ich auf einen Buffer mehrere unterschiedliche (Read- &amp; 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- &amp; Write-Operationen gleichzeitig auf ein boost::asio::streambuf Objekt ausführen?</p>
<p>[<em>] Was ist der Sinn dieser Methode <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/basic_streambuf/commit.html" rel="nofollow">boost::asio::streambuf::commit</a>? Von der Dokumentation werde ich so gar nicht schlau daraus:</em><code>Move characters from the output sequence to the input sequence.</code>* Natürlich hat die Funktionen einen Sinn, aber dieser offenbart sich mir noch nicht. Wieso will ich das &quot;Geschriebene&quot; (i.e. Output-Sequenz) in das &quot;Gelesene&quot; (Input-Sequenz) schieben? (Siehe Kommentar im Beispiel)</p>
<pre><code>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 &quot;committed&quot; from output sequence to input sequence // WIESO?
b.commit(n);

std::istream is(&amp;b);
std::string s;
is &gt;&gt; s;
</code></pre>
<p>Hoffe jemand, der sich mit I/O Streams auskennt bzw. die Antwort auf meine Fragen hat, kann mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319404/boost-asio-streambuf-commit-consume</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 20:13:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319404.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Aug 2013 10:18:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::asio::streambuf commit&#x2F;consume on Sat, 17 Aug 2013 10:18:42 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum-Team!</p>
<p>Ich beschäftige mich z.Z. mit boost::asio und bin auf die Klasse <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/streambuf.html" rel="nofollow">boost::asio::streambuf</a> gestoßen. Allerdings verstehe ich einige Internals von ihr nicht.</p>
<p>Sowie ich es verstanden habe, beinhaltet <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/streambuf.html" rel="nofollow">boost::asio::streambuf</a> 2 Sequenzen, die Input-Sequenz und die Output-Sequenz. Und hier die Fragen, die sich mir nun stellen:</p>
<p>[*] Es führt zu UB, wenn ich auf einen Buffer mehrere unterschiedliche (Read- &amp; 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- &amp; Write-Operationen gleichzeitig auf ein boost::asio::streambuf Objekt ausführen?</p>
<p>[<em>] Was ist der Sinn dieser Methode <a href="http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/basic_streambuf/commit.html" rel="nofollow">boost::asio::streambuf::commit</a>? Von der Dokumentation werde ich so gar nicht schlau daraus:</em><code>Move characters from the output sequence to the input sequence.</code>* Natürlich hat die Funktionen einen Sinn, aber dieser offenbart sich mir noch nicht. Wieso will ich das &quot;Geschriebene&quot; (i.e. Output-Sequenz) in das &quot;Gelesene&quot; (Input-Sequenz) schieben? (Siehe Kommentar im Beispiel)</p>
<pre><code>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 &quot;committed&quot; from output sequence to input sequence // WIESO?
b.commit(n);

std::istream is(&amp;b);
std::string s;
is &gt;&gt; s;
</code></pre>
<p>Hoffe jemand, der sich mit I/O Streams auskennt bzw. die Antwort auf meine Fragen hat, kann mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346605</guid><dc:creator><![CDATA[Hannes R.]]></dc:creator><pubDate>Sat, 17 Aug 2013 10:18:42 GMT</pubDate></item></channel></rss>