<?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[mehre socketverbindungen an server gleichzeitig]]></title><description><![CDATA[<p>hallo,</p>
<p>wie kriege ich es hin, das mein tcp server mehrere verbindung annehmen kann? sobald mein server die erste verbindung angenommen hat, wartet er dort auf daten (recv()) und während dessen ist ja alles geblockt. nennt sich glaub ich auch blocking-call oder so ähnlich?!?</p>
<p>was muss ich machen, damit ich weiterhin auf verbindungen warten kann, während andere clients bereits eine verbindung zu meinem server aufgebaut haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173993/mehre-socketverbindungen-an-server-gleichzeitig</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 12:12:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173993.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Feb 2007 20:16:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Wed, 21 Feb 2007 20:16:26 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>wie kriege ich es hin, das mein tcp server mehrere verbindung annehmen kann? sobald mein server die erste verbindung angenommen hat, wartet er dort auf daten (recv()) und während dessen ist ja alles geblockt. nennt sich glaub ich auch blocking-call oder so ähnlich?!?</p>
<p>was muss ich machen, damit ich weiterhin auf verbindungen warten kann, während andere clients bereits eine verbindung zu meinem server aufgebaut haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232867</guid><dc:creator><![CDATA[Joachim2006]]></dc:creator><pubDate>Wed, 21 Feb 2007 20:16:26 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Wed, 21 Feb 2007 21:06:28 GMT]]></title><description><![CDATA[<p>Ist dein Problem die anderen Clients anzunehemn, oder das diese dann nichts schicken können?</p>
<p>Mfg Ominion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232889</guid><dc:creator><![CDATA[Ominion]]></dc:creator><pubDate>Wed, 21 Feb 2007 21:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Wed, 21 Feb 2007 21:15:45 GMT]]></title><description><![CDATA[<p>Hallo Joachim,</p>
<p>da gibt es verschieden Möglichkeiten:</p>
<p>1:<br />
Setze den Socket auf nonblocking. Dann kommt recv immer gleich wieder zurück. Wenn er blockieren würde bekommst du die Fehlermeldung WSAEWOULDBLOCK.</p>
<p>2:<br />
Schau dir mal select an. Sobald ein Socket was für dich hat kommt der select zurück. Dann kannst du abfragen welchen socket du bearbeiten musst. Da kannst du auch timeouts angeben.</p>
<p>3:<br />
Spendiere für jeden Client einen Thread.</p>
<p>Alles hat seine Vor- und Nachteil … wie immer im Leben <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>Gruß<br />
Volker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232893</guid><dc:creator><![CDATA[Volker_0815 (Gast)]]></dc:creator><pubDate>Wed, 21 Feb 2007 21:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Wed, 21 Feb 2007 21:20:00 GMT]]></title><description><![CDATA[<p>Der Server muß halt wieder beim accept landen. Willst Du gleichzeitig auf Daten von einem Client (recv) und auf neue Verbindungen warten, gibt es mehrere Möglichkeiten:<br />
- mit fork() einen Prozess pro client erzeugen (Unix/Linux)<br />
- ein Thread pro Dateideskriptor<br />
- mittels poll oder select alle Dateideskriptoren überwachen und dann nicht blockierend lesen</p>
<p>Tntnet</p>
<p>edit: ok Volker war schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> - dafür ist sein 1. Vorschlag unvollständig und mein Vorschlag mit fork ist nicht dabei :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232897</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 21 Feb 2007 21:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Thu, 22 Feb 2007 07:15:27 GMT]]></title><description><![CDATA[<p>ah ok,</p>
<p>das mit den threads hört sich am besten an...(behaupte ich mal :P)</p>
<p>sobald ich also einen connect hab erzeuge ich einen thread der diese verbindung behandelt (snd/recv) während der server wieder in den listen-modus geht und darauf wartet das was passiert?!?(Theorie so richtig?)</p>
<p>Die Sache mit dem Non-Blocking Call, wie funktioniert das? Muss ich da einen Parameter bei der Erzeugung setzen?!?</p>
<p>danke für die ideen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232941</guid><dc:creator><![CDATA[Joachim2006]]></dc:creator><pubDate>Thu, 22 Feb 2007 07:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Thu, 22 Feb 2007 07:36:30 GMT]]></title><description><![CDATA[<p>[quote=&quot;Joachim2006&quot;]ah ok,</p>
<p>das mit den threads hört sich am besten an...(behaupte ich mal :P)</p>
<p>quote]</p>
<p>Und schon wieder eine falsche Behauptung mehr auf der Welt <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>Die Antwort lautet, es kommt drauf an. Wenn Du nur eine handvoll sockets aufmachen willst, ist diese Vorgehensweise ok. Sind es dagegen viele Sockets, sagen wir mal 500+, dann verbraucht die reine Verwaltung der Threads am Ende mehr Performance als alles andere zusammen.</p>
<p>Da von der Theorie her ohnehin nie mehr Sachen gleichzeitig passieren können wie Du Prozessoren (bzw. Cores) hast, ist es aus Performancesicht meistens besser mit einem Thread und select zu arbeiten.</p>
<p>Multithreading hat einen Preis, der durch die Verwaltung der Threads und die Context-switches erzeugt wird. Man sollte sich daher gut überlegen wann und wie viele Threads man erzeugt...</p>
<p>Eine Idee für deine Situation: Nimm einen Thread der nur auf die socket wartet und die einkommenden Packete in ein Message-Queue schreibt.</p>
<p>Nimm einen zweiten Thread der die Pakete aus dem queue nimmt und weiteverarbeitet. Bei Bedarf kannst du auch mehr als einen worker-Thread nehmen um den Prozessor besser auszulasten. (denn as ist es wofuer Multithreading eigendlich gut ist, den Prozessor optimal auslasten bis er halt 100% ereicht...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232952</guid><dc:creator><![CDATA[srop]]></dc:creator><pubDate>Thu, 22 Feb 2007 07:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Thu, 22 Feb 2007 09:21:28 GMT]]></title><description><![CDATA[<p>es reicht doch theoretisch 1 thread, du legst dir nen vector&lt;SOCKET&gt; an, und nen server-socket.<br />
jetzt nimmst du 2 fd_set einer zu lesen einer für error(NIE das FD_ZERO vergessen um das set zu löschen), tust deinen ServerSocket rein, fährst ein select, ist das ergebnis &gt; 1, prüfst du ob an deinem serversocket was anliegt, ist dem so holst du mit accept den client, schiebst ihn in den vektor und gehst ans ende der schleife, dort füllst du deine fd_set wieder (ServerSocket + Clients(sofern vorhanden)) fährst wieder ein select, ist auch hier wieder &gt; 1 dann prüfst du erst deinen serversocket und anschliessend alle sockets die sonst noch im fd_set fürs lesen stehen auf daten, verarbeitest sie, oder WENN recv = 0 ergibt löschst du sie.<br />
JA ich weis das da noch einiges optimiert werden kann, aber hey ihr wollt sicher auch noch was beitragen :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233029</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 09:21:28 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Thu, 22 Feb 2007 10:36:15 GMT]]></title><description><![CDATA[<p>Das ist Volkers Lösungsvorschlag 2.</p>
<p>Warum schlägst Du std::vector vor? Von der Logik her wäre es ein std::set - nämlich eine ungeordnete Liste (um mal wieder was C++-mässiges einzubringen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233113</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 22 Feb 2007 10:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to mehre socketverbindungen an server gleichzeitig on Thu, 22 Feb 2007 11:19:27 GMT]]></title><description><![CDATA[<p>hast ja recht, vor allem da man das set einfach nur kopieren brauch und nich umständlich aus dem vektor socket für socket zu kopieren muss</p>
<p>ausserdem hab ich 2. nur etwas weiter ausformuliert, weil ich die verwendung von threads in c++ etwas zu platformabhängig finde</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233157</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 11:19:27 GMT</pubDate></item></channel></rss>