<?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[socket recv]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann recv jemals weniger daten empfangen als versendet?</p>
<p>z.b. ich sende 2 strings mit je 1000 zeichen direkt hintereinander.</p>
<pre><code class="language-cpp">//sizeof(buf) ist groß genug
bytes = recv(sender, buf, sizeof(buf), 0);
</code></pre>
<p>kann bytes jemals unter 1000 sein?</p>
<p>danke im voraus.</p>
<p>cppmember</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197981/socket-recv</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 18:26:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197981.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Nov 2007 14:24:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 14:24:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann recv jemals weniger daten empfangen als versendet?</p>
<p>z.b. ich sende 2 strings mit je 1000 zeichen direkt hintereinander.</p>
<pre><code class="language-cpp">//sizeof(buf) ist groß genug
bytes = recv(sender, buf, sizeof(buf), 0);
</code></pre>
<p>kann bytes jemals unter 1000 sein?</p>
<p>danke im voraus.</p>
<p>cppmember</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404439</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Fri, 16 Nov 2007 14:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 14:57:27 GMT]]></title><description><![CDATA[<p>recv() kann unter umständen auch weniger als die angeorderte Menge Bytes empfangen.</p>
<p>Du musst selber durch eine Schleife etc. sicher stellen, dass alles ankommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404470</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Fri, 16 Nov 2007 14:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 15:10:45 GMT]]></title><description><![CDATA[<p>Was ist in diesem FAlle buf?<br />
Wenn buf ein zB. char[1000] buf ist und du schreibst sizeof(buf) ist das immer 1, da char 1 byte ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404485</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 16 Nov 2007 15:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 15:54:00 GMT]]></title><description><![CDATA[<p>hmm... das ist ja kompliziert... eine schleife klingt gut, aber in dem fall eher eine schleife mit warte-funktion oder so.</p>
<p>wie sieht denn eine schleife, die auf netzwerkdaten von einem bestimmten client wartet, aus?</p>
<p>Mondmann schrieb:</p>
<blockquote>
<p>Was ist in diesem FAlle buf?<br />
Wenn buf ein zB. char[1000] buf ist und du schreibst sizeof(buf) ist das immer 1, da char 1 byte ist...</p>
</blockquote>
<p>wirklich? hab ich nie bemerkt. ich verwende visual studio c++.</p>
<p>danke und mfg</p>
<p>cppmember</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404521</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Fri, 16 Nov 2007 15:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 15:58:52 GMT]]></title><description><![CDATA[<p>edit: unsinn gelöscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404524</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Fri, 16 Nov 2007 15:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 16:03:55 GMT]]></title><description><![CDATA[<p>Das liegt daran, dass bei</p>
<pre><code class="language-cpp">char buf[1000];
</code></pre>
<p>sizeof(buf) wirklich 1000 liefert.</p>
<p>Wenn du aber aber so etwas hast:</p>
<pre><code class="language-cpp">char* buf=new char[1000];
</code></pre>
<p>Dann würde sizeof(buf) 4 zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404531</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Fri, 16 Nov 2007 16:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 16:09:51 GMT]]></title><description><![CDATA[<p>Nanyuki schrieb:</p>
<blockquote>
<p>Das liegt daran, dass bei</p>
<pre><code class="language-cpp">char buf[1000];
</code></pre>
<p>sizeof(buf) wirklich 1000 liefert.</p>
<p>Wenn du aber aber so etwas hast:</p>
<pre><code class="language-cpp">char* buf=new char[1000];
</code></pre>
<p>Dann würde sizeof(buf) 4 zurückgeben.</p>
</blockquote>
<p>c++ basics, das kenne ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404540</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Fri, 16 Nov 2007 16:09:51 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 16:12:09 GMT]]></title><description><![CDATA[<p>Stimmt ich hab nen käse geschrieben.<br />
Ich mach jetzt feierabend, ich checks heute eh nimmer:-)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404544</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 16 Nov 2007 16:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 16:30:11 GMT]]></title><description><![CDATA[<p>Mondmann schrieb:</p>
<blockquote>
<p>Stimmt ich hab nen käse geschrieben.<br />
Ich mach jetzt feierabend, ich checks heute eh nimmer:-)</p>
</blockquote>
<p>des macht nix.</p>
<p>Zurück zum Thema:</p>
<p>Mein Code sieht ungefähr so aus:</p>
<pre><code class="language-cpp">while(1)
    {
        FD_ZERO(&amp;fds);
        max = fill_set(&amp;fds, &amp;list);

        FD_SET(s, &amp;fds);
        if (s &gt; max)
            max = s;
        select(max + 1, &amp;fds, NULL, NULL, NULL);
        if (FD_ISSET(s, &amp;fds))
        {
			lz = add_client(&amp;list);
            c = accept(s, (sockaddr *)&amp;(lz-&gt;addr), &amp;addrlen);
            lz-&gt;sock = c;
        } else {
            sender = get_sender(&amp;fds);
            bytes = recv(sender, buf, sizeof(buf), 0);
//PROBLEM: hier soll sichergestellt werden dass daten von diesem &quot;sender&quot; komplett ankommen
		}
	}
</code></pre>
<p>Hat jemand ne Idee?<br />
Oder muss ich auf select-Methode verzichten und für jeden Client einen Thread starten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404556</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Fri, 16 Nov 2007 16:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 18:52:58 GMT]]></title><description><![CDATA[<p>ERrrrrrrrrrrrrrrrm... Das geht doch viel einfacher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Dem flags argument gibste einfach MSG_WAITALL. fertig. (POSIX-konform)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404627</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Fri, 16 Nov 2007 18:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Fri, 16 Nov 2007 23:18:48 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17023">@voidpointer</a>: Windows ist nicht POSEX-konform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404748</guid><dc:creator><![CDATA[hinweis]]></dc:creator><pubDate>Fri, 16 Nov 2007 23:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Sat, 17 Nov 2007 13:28:20 GMT]]></title><description><![CDATA[<p>hinweis schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17023">@voidpointer</a>: Windows ist nicht POSEX-konform.</p>
</blockquote>
<p>Sicher? Es gibt AFAIK POS<strong>I</strong>X-konforme Compiler für Windoof... vllt könnte man MinGW probieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404914</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Sat, 17 Nov 2007 13:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Tue, 27 Nov 2007 15:35:36 GMT]]></title><description><![CDATA[<p>ok werde mal nachschauen, auf den ersten blick fand ich keine definition von MSG_WAITALL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411103</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Tue, 27 Nov 2007 15:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Tue, 27 Nov 2007 15:54:33 GMT]]></title><description><![CDATA[<p>Musste auch vor kurzem feststellen, dass windoof kein MSG_WAITALL hat...</p>
<p>ein kleiner Wrap derart sollte es machen, getestet hab ich es noch nicht...</p>
<pre><code class="language-cpp">#ifdef __WIN32__
bool Client::recv(void * buf , size_t len ,  int flags)
{
        register size_t received = 0, next;
        do {
                next=(::recv(sock, (char*)buf+received, len-received, flags));
                received+=next;
        } while (received&lt;len &amp;&amp; next); // TODO ...
        return (bool)next;
}
#else
// ...
// POSIX IMPLEMENTATION
#endif // __WIN32__
</code></pre>
<p>Wie gesagt ich bin mir da nicht sicher und habs noch nicht getestet... evtl. muss noch nen select rein... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Aber vllt hilft's dir ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411110</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Tue, 27 Nov 2007 15:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Wed, 28 Nov 2007 10:09:27 GMT]]></title><description><![CDATA[<p>Hmmm danke aber ich glaub nicht das der code mir was hilft, denn es geht ja darum darauf zu warten bis alle daten angekommen sind. kann ja sein dass der rest erst nach 1000ms ankommen.</p>
<p>ich muss wohl beim senden eine Länge mitgeben und dann würde dein Code auch nützlich sein, es sei denn man kriegt den parameter &quot;len&quot; irgendwie vom system mit.</p>
<p>und zum schluss muss ich das gesamte system auf threads um stellen, select ist nicht geeignet, weil der server schliesslich in der warte-zeit andere clients bedienen soll.</p>
<p>ich wollte nicht mit threads arbeiten, weil thread-save ziemlich kompliziert sein würde</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411439</guid><dc:creator><![CDATA[cppmember]]></dc:creator><pubDate>Wed, 28 Nov 2007 10:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to socket recv on Wed, 28 Nov 2007 10:38:27 GMT]]></title><description><![CDATA[<p>cppmember schrieb:</p>
<blockquote>
<p>ich wollte nicht mit threads arbeiten, weil thread-save ziemlich kompliziert sein würde</p>
</blockquote>
<p>Eigentlich musst du nur aufpassen, dass die Schnittstelle der Threads relativ klein bleibt und die halt absichern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411457</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 28 Nov 2007 10:38:27 GMT</pubDate></item></channel></rss>