<?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 example]]></title><description><![CDATA[<p>Wieso geht der Programmierer dieses Beispiels: <a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/chat/chat_client.cpp" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/chat/chat_client.cpp</a></p>
<p>davon aus, dass boost::asio::async_write den ganzen buffer in einem Rutsch sendet bzw. dass boost::asio::async_read mit einem Mal alles einliest?</p>
<p>Müsste er nicht bytes_transffered kontrollieren?</p>
<p>siehe Methoden: do_write, handle_write, handle_read_*</p>
<p>Wäre um jede Klarstellung dankbar, Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289465/boost-asio-example</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 05:43:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289465.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jul 2011 14:28:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::asio example on Tue, 05 Jul 2011 14:28:15 GMT]]></title><description><![CDATA[<p>Wieso geht der Programmierer dieses Beispiels: <a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/chat/chat_client.cpp" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/chat/chat_client.cpp</a></p>
<p>davon aus, dass boost::asio::async_write den ganzen buffer in einem Rutsch sendet bzw. dass boost::asio::async_read mit einem Mal alles einliest?</p>
<p>Müsste er nicht bytes_transffered kontrollieren?</p>
<p>siehe Methoden: do_write, handle_write, handle_read_*</p>
<p>Wäre um jede Klarstellung dankbar, Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089131</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Tue, 05 Jul 2011 14:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Tue, 05 Jul 2011 15:26:58 GMT]]></title><description><![CDATA[<p>Das Bsp. ist ok. Siehe Doku zu boost::asio::async_read(..):<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_read/overload1.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_read/overload1.html</a><br />
Es wird <em>genau</em> soviel gelesen wie beim Aufruf spezifiziert (oder es wird ein Error signalisiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089161</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 05 Jul 2011 15:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Tue, 05 Jul 2011 16:20:18 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Das Bsp. ist ok. Siehe Doku zu boost::asio::async_read(..):<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_read/overload1.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_read/overload1.html</a><br />
Es wird <em>genau</em> soviel gelesen wie beim Aufruf spezifiziert (oder es wird ein Error signalisiert).</p>
</blockquote>
<p>Aber hier sagst du was anderes: <a href="http://www.c-plusplus.net/forum/p2048987#2048987" rel="nofollow">http://www.c-plusplus.net/forum/p2048987#2048987</a><br />
Dort meinst du, dass die Nachricht zerstückelt ankommen kann</p>
<p>Oder verstehe ich dich einfach falsch?<br />
Ich verstehe dich nämlich so:<br />
Wenn mein buffer ein std::array&lt;char, 8192&gt; groß ist und ich eine Nachricht empfange die 4096 bytes groß ist, würde laut meines Verständnisses deiner Aussage der read_handler genau einmal aufgerufen werden.</p>
<p>Wäre jedoch die empfangene Nachricht 10240 bytes groß, wäre bytes_transferred == 8192 und ich müsste nochmal asio::async_read aufrufen um den Rest der Nachricht einlesen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089188</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Tue, 05 Jul 2011 16:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Tue, 05 Jul 2011 21:08:10 GMT]]></title><description><![CDATA[<p>also die fragen die sich mir stellen sind nun</p>
<p>welche von den aussagen stimmt?<br />
muss ich bei einem boost::asio::async_(write/read) überprüfen ob das ausgehende Packet in seiner gesamten Größe gesendet wurde oder nicht?</p>
<p>der post liest sich angreifend an, ist er aber nicht. er ist sehr nett gemeint. ich bin nur etwas verwirrt, weil ich es richtig machen will aber mehrere aussagen lese.</p>
<p>wäre dir dankbar wenn du mir eine antwort schreiben könntest.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089302</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Tue, 05 Jul 2011 21:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 10:36:42 GMT]]></title><description><![CDATA[<p>Ob Du prüfen musst wieviele Bytes gesendet/empfangen wurden hängt davon ab welche Methode Du dazu aufrufst.</p>
<p>Bsp.</p>
<p><strong>boost::asio::async_read(..)</strong> empfängt GENAU soviel wie im Buffer angegeben<br />
<strong>boost::asio::ip::tcp::socket::async_receive(..) bzw. async_read_some(..)</strong> empfangen maximal soviel wie im Buffer angegeben ist, der Handler kann aber auch früher augerufen werden</p>
<p>Auch brauchst Du ein Protokoll - im Fall des Chats wird mit fixen Message Längen gearbeitet - desshalb kann boost::asio::async_read(..) benutzt werden. Es nimmt dir die &quot;Protokoll Implementaion&quot; ab.</p>
<p><strong>Edit:</strong></p>
<blockquote>
<p>der post liest sich angreifend an, ist er aber nicht. er ist sehr nett gemeint. ich bin nur etwas verwirrt, weil ich es richtig machen will aber mehrere aussagen lese.</p>
</blockquote>
<p>Nur keine Angst - das haut mich schon nicht aus den Socken.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089452</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 06 Jul 2011 10:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 13:31:43 GMT]]></title><description><![CDATA[<p>Kannst du nur noch zur Klarstellung meinen Post mit 'Genau' und 'Falsch' beantworten?</p>
<p>Wenn ich boost::asio::async_read mit einem Buffer von 8192 bytes verwende, dann wird der completion_handler erst dann aufgerufen, wenn die 8192 bytes beschrieben wurden (oder ein error tritt auf)? -&gt; das heißt es wäre nicht klug einen zu großen Buffer(8192) zu verwenden, wenn die Messages sich bspw. auf 20-30 Zeichen beschränken, richtig?</p>
<p>Wenn ich boost::asio::async_receive verwende, dann wird der completion_handler undefiniert bzw. ab und an aufgerufen? oder wenn der Buffer voll ist -&gt; ich sehe hier keinen Sinn der Methode. Gibts hier ein Timeout, der den completion_handler flushed oder wird er wirklich irgendwann aufgerufen?</p>
<p>Danke theta für deine Hilfe. Bin dir sehr dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089538</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Wed, 06 Jul 2011 13:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 13:37:08 GMT]]></title><description><![CDATA[<p>thankfulperson schrieb:</p>
<blockquote>
<p>...Gibts hier ein Timeout, der den completion_handler flushed oder wird er wirklich irgendwann aufgerufen?</p>
</blockquote>
<p>Die Doku von boost ist sehr eigen bzw. war ich wahrscheinlich zu lange mit einfacheren Dokus verwöhnt die die Beziehungen zwischen den einzelnen Methoden auch angegeben haben.</p>
<p>Die 2. Frage wäre somit beantwortet:<br />
Der Programmierer muss anscheinend mit <a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/basic_stream_socket/available/overload1.html" rel="nofollow">available</a> in gewissen Zeitabständen schauen ob was im Buffer liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089542</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Wed, 06 Jul 2011 13:37:08 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 18:04:22 GMT]]></title><description><![CDATA[<p>thankfulperson schrieb:</p>
<blockquote>
<p>Kannst du nur noch zur Klarstellung meinen Post mit 'Genau' und 'Falsch' beantworten?</p>
</blockquote>
<p>Ja. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>thankfulperson schrieb:</p>
<blockquote>
<p>Wenn ich boost::asio::async_read mit einem Buffer von 8192 bytes verwende, dann wird der completion_handler erst dann aufgerufen, wenn die 8192 bytes beschrieben wurden (oder ein error tritt auf)? -&gt; das heißt es wäre nicht klug einen zu großen Buffer(8192) zu verwenden, wenn die Messages sich bspw. auf 20-30 Zeichen beschränken, richtig?</p>
</blockquote>
<p>Ja. Exakt das bedeutet es.</p>
<p>thankfulperson schrieb:</p>
<blockquote>
<p>Wenn ich boost::asio::async_receive verwende, dann wird der completion_handler undefiniert bzw. ab und an aufgerufen? oder wenn der Buffer voll ist -&gt; ich sehe hier keinen Sinn der Methode. Gibts hier ein Timeout, der den completion_handler flushed oder wird er wirklich irgendwann aufgerufen?</p>
</blockquote>
<p>1. Es gibt keine Funktion boost::asio::async_receive(..) nur eine Methode boost::asio::ip::tcp::socket::async_receive(..).<br />
2. Der TCP Stack entscheidet wann der Handler aufgerufen wird. Nur das Maximum an Bytes im Buffer ist festgelegt - nicht aber das Minimum.</p>
<p>thankfulperson schrieb:</p>
<blockquote>
<p>Die 2. Frage wäre somit beantwortet:<br />
Der Programmierer muss anscheinend mit available in gewissen Zeitabständen schauen ob was im Buffer liegt.</p>
</blockquote>
<p>Nein, muss man nicht - kann man. Normalerweise wird es nicht benötigt!</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089658</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 06 Jul 2011 18:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 20:07:58 GMT]]></title><description><![CDATA[<p>Passt. Perfekt. Danke Simon! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089709</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Wed, 06 Jul 2011 20:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio example on Wed, 06 Jul 2011 20:57:50 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>1. Es gibt keine Funktion boost::asio::async_receive(..) nur eine Methode boost::asio::ip::tcp::socket::async_receive(..).<br />
2. Der TCP Stack entscheidet wann der Handler aufgerufen wird. Nur das Maximum an Bytes im Buffer ist festgelegt - <strong>nicht aber das Minimum.</strong></p>
</blockquote>
<p>Langsam finde ich mich zurecht in der Dokumentation von boost.<br />
Vielleicht für den ein oder anderen:</p>
<p><a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_write/overload2.html" rel="nofollow">async_write(2 overloading)</a><br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/async_read/overload2.html" rel="nofollow">async_read(2 overloading)</a></p>
<p>Den 3. Parameter 'CompletionCondition' könnte man verwenden um ein Minimum anzugeben, wie beispielsweise:<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/transfer_at_least.html" rel="nofollow">transfer_at_least(n)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089727</guid><dc:creator><![CDATA[thankfulperson]]></dc:creator><pubDate>Wed, 06 Jul 2011 20:57:50 GMT</pubDate></item></channel></rss>