<?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[Winsockets, geschlossene Verbundung? Wie Feststellen?]]></title><description><![CDATA[<p>Ich habe eine Library, die die Stream-Sockets OO umhüllt. Ich biete eine Funktion, die so etwas wie Select() bietet, nur überlasse ich das Empfange und Senden von Daten dem User der Lib.</p>
<p>Problem: Select() meint, dass neue Daten anliegen, wenn ein Client die<br />
Verbindung schließt.<br />
Ich kann nicht feststellen ob der Client die Verbindung geschlossen hat,<br />
ohne recv() aufzurufen. [recv() == SOCKET_ERROR]</p>
<p>Suche: Eine funktion außer recv() um zu prüfen ob die Verbindung noch steht.</p>
<p>Kann mir jemand helfen? Danke im voraus!</p>
<p>Ps.: Ansonsten müsste ich hässlich eine Methode wie: SocketIsDead(...) bereitstellen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140912/winsockets-geschlossene-verbundung-wie-feststellen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:27:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140912.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Mar 2006 22:55:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Fri, 17 Mar 2006 22:55:42 GMT]]></title><description><![CDATA[<p>Ich habe eine Library, die die Stream-Sockets OO umhüllt. Ich biete eine Funktion, die so etwas wie Select() bietet, nur überlasse ich das Empfange und Senden von Daten dem User der Lib.</p>
<p>Problem: Select() meint, dass neue Daten anliegen, wenn ein Client die<br />
Verbindung schließt.<br />
Ich kann nicht feststellen ob der Client die Verbindung geschlossen hat,<br />
ohne recv() aufzurufen. [recv() == SOCKET_ERROR]</p>
<p>Suche: Eine funktion außer recv() um zu prüfen ob die Verbindung noch steht.</p>
<p>Kann mir jemand helfen? Danke im voraus!</p>
<p>Ps.: Ansonsten müsste ich hässlich eine Methode wie: SocketIsDead(...) bereitstellen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018747</guid><dc:creator><![CDATA[Sowieso]]></dc:creator><pubDate>Fri, 17 Mar 2006 22:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 06:36:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>was spricht denn dagegen, innerhalb der Klasse mit recv &amp; MSG_PEEK zu schauen, ob es wirklich Daten zum Lesen gibt bzw. geschlossen wurde, bevor die Klasse nach außen hin was meldet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018782</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 18 Mar 2006 06:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 09:40:15 GMT]]></title><description><![CDATA[<p>SeppSchrot schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>was spricht denn dagegen, innerhalb der Klasse mit recv &amp; MSG_PEEK zu schauen, ob es wirklich Daten zum Lesen gibt bzw. geschlossen wurde, bevor die Klasse nach außen hin was meldet?</p>
</blockquote>
<p>Dann guck mal in die Winsock Lame List. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018845</guid><dc:creator><![CDATA[...........]]></dc:creator><pubDate>Sat, 18 Mar 2006 09:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 11:46:24 GMT]]></title><description><![CDATA[<p>Oh, das ist nicht schön.</p>
<p>Und wenn du den Weg über selbstverwalteten Puffer gehst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018910</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 18 Mar 2006 11:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 12:15:19 GMT]]></title><description><![CDATA[<p>Nur eine Idee wenn dein Client die Verbindung schließt könntest dieser<br />
ja kurz davor ein zeichen senden. Dann weißt du das er sich trennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018930</guid><dc:creator><![CDATA[Stefan311]]></dc:creator><pubDate>Sat, 18 Mar 2006 12:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 13:27:01 GMT]]></title><description><![CDATA[<p>Naja, es gibt ja diese Sprichwort, dass man bei Webanwendungen grundsätzlich davon ausgehen soll, dass 'die Welt da draußen' komplett schlecht ist. So auch<br />
die Clienten, und sei es nur, dass der Benutzer übers Kabel stolpert. (Was mir mindestens 1x die Woche passiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019009</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 18 Mar 2006 13:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 15:11:57 GMT]]></title><description><![CDATA[<p>Ich verstehe das Problem nicht. Was ist daran so schlimm recv aufzurufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019085</guid><dc:creator><![CDATA[hä]]></dc:creator><pubDate>Sat, 18 Mar 2006 15:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 19:42:38 GMT]]></title><description><![CDATA[<p>Und wie wäre es damit:<br />
Und zwar das der server so jede minute was zum client sendet und der darauf antwirten muss also so:<br />
Server zum Client: Bist du noch da?<br />
Client zum Server: Ja<br />
Das ist jetzt natürlich nur wörtlich gemeint.Also so ne automatik.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019277</guid><dc:creator><![CDATA[Stefan311]]></dc:creator><pubDate>Sat, 18 Mar 2006 19:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 19:47:09 GMT]]></title><description><![CDATA[<p>Das macht eigentlich das TCP schon automatisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019281</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 18 Mar 2006 19:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 19:55:40 GMT]]></title><description><![CDATA[<p>Beim IRC Protokoll gibt es auch diese PING PONG.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019285</guid><dc:creator><![CDATA[anmerkung-]]></dc:creator><pubDate>Sat, 18 Mar 2006 19:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sat, 18 Mar 2006 20:01:20 GMT]]></title><description><![CDATA[<p>oder sowas: <a href="http://www.freesoft.org/CIE/RFC/1122/114.htm" rel="nofollow">http://www.freesoft.org/CIE/RFC/1122/114.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019292</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 18 Mar 2006 20:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Sun, 19 Mar 2006 20:54:44 GMT]]></title><description><![CDATA[<p>SORRY!!! Ich hatte den Thread völlig vergessen! <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="😮"
    /></p>
<p>Danke für all euere Posts erstmal vorweg!</p>
<p>SeppSchrot schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>was spricht denn dagegen, innerhalb der Klasse mit recv &amp; MSG_PEEK zu schauen, ob es wirklich Daten zum Lesen gibt bzw. geschlossen wurde, bevor die Klasse nach außen hin was meldet?</p>
</blockquote>
<p>Ich hab noch nicht begriffen wie du das meinst, kannst du vieleicht einen Beispielcode posten? Soweit ich das jetzt verstanden habe scheint es ein recv() zu simulieren was du meinst, klingt nicht schlecht.</p>
<p>hä schrieb:</p>
<blockquote>
<p>Ich verstehe das Problem nicht. Was ist daran so schlimm recv aufzurufen?</p>
</blockquote>
<p>Ich möchte mein Projekt so modular wie möglich gestalten, die Socket-Library ist eines der Module. Es hat die Aufgabe send() und recv() als Methoden bereitzustellen, nicht sie nach eigenem belieben aufzurufen. Klar, ich könnte wie von:</p>
<p>Stefan311 schrieb:</p>
<blockquote>
<p>Und wie wäre es damit:<br />
Und zwar das der server so jede minute was zum client sendet und der darauf antwirten muss also so:<br />
Server zum Client: Bist du noch da?<br />
Client zum Server: Ja<br />
Das ist jetzt natürlich nur wörtlich gemeint.Also so ne automatik.</p>
</blockquote>
<p>Vorgeschlagen einfach in der Library mit etwas Overhead lösen, indem ich eine Basiskommunikation reinbaue, von der der Nutzer der Bibliothek nichts mitbekommt, aber dass würde die Flexibilität versauen, die Library wäre inkompatibel mit anderen Socket-Anwendungen, welche diese Sub-Kommunikation [&quot;Hallo? Noch da?&quot; &lt;-&gt; &quot;Jupp, noch da...&quot;] anders oder gar nicht implementieren.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>net schrieb:</p>
<blockquote>
<p>oder sowas: <a href="http://www.freesoft.org/CIE/RFC/1122/114.htm" rel="nofollow">http://www.freesoft.org/CIE/RFC/1122/114.htm</a></p>
</blockquote>
<p>Klingt sehr interessant, auch wenn ich mir nicht sicher bin, ob ich das in vollem Umfang verstanden habe. Mir scheint das eine Diskussion über eine &quot;Keep-Alive&quot; Implementierung in TCP zu sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<blockquote>
<p>Implementors MAY include &quot;keep-alives&quot; in their TCP implementations, although this practice is not universally accepted. If keep-alives are included, the application MUST be able to turn them on or off for each TCP connection, and they MUST default to off.</p>
</blockquote>
<p>Wo soll das denn implementiert werden?? Und von wem? Schaut mir ehr aus würden die von der TCP implementierung des BS reden? Ich schätze dass muss mir jemand erklären... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>@SeppSchrot: Ich würde mich sehr über einen Tipp zur Verwendung von &quot;recv &amp; MSG_PEEK&quot; freuen!</p>
<p>Danke im Voraus. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019966</guid><dc:creator><![CDATA[Sowieso]]></dc:creator><pubDate>Sun, 19 Mar 2006 20:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Mon, 20 Mar 2006 09:13:01 GMT]]></title><description><![CDATA[<p>Sowieso schrieb:</p>
<blockquote>
<p>Wo soll das denn implementiert werden?? Und von wem? Schaut mir ehr aus würden die von der TCP implementierung des BS reden? Ich schätze dass muss mir jemand erklären... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>so isses. ein tcp kann, aber muss nicht, mit keep-alives umgehen können. ein tcp welches keine keep-alives kennt, wird dadurch aber nicht gestört weil aus dessen sicht sind es gültige pakete aber ohne inhalt. das tcp in den windosen kann aber keep-alives. aktivieren kannst du das mit setsockopt(). guckst du: <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/setsockopt_2.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/setsockopt_2.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020114</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Mon, 20 Mar 2006 09:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Mon, 20 Mar 2006 18:45:43 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>so isses. ein tcp kann, aber muss nicht, mit keep-alives umgehen können. ein tcp welches keine keep-alives kennt, wird dadurch aber nicht gestört weil aus dessen sicht sind es gültige pakete aber ohne inhalt. das tcp in den windosen kann aber keep-alives. aktivieren kannst du das mit setsockopt(). guckst du: <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/setsockopt_2.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/setsockopt_2.asp</a></p>
</blockquote>
<p>Vielen Dank! Damit kann ich was anfangen glaube ich!<br />
Aber.. gibt's dass auch für die BSD-Socket-API?<br />
Ich meine vor allem Linux und MacOS, Solaris wäre auch nicht schlecht... <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020533</guid><dc:creator><![CDATA[Kernel_Panic]]></dc:creator><pubDate>Mon, 20 Mar 2006 18:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Winsockets, geschlossene Verbundung? Wie Feststellen? on Tue, 21 Mar 2006 21:11:05 GMT]]></title><description><![CDATA[<p>Hier bin ich nochmal. <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="🙂"
    /><br />
Hab' das Problem einfach lösen können, - und will das niemandem vorenthalten wie ich es gemacht habe.. also:</p>
<p>Ich hatte ja einen Wrapper für (erstmal nur) die WinSocketApi programmiert. Das Problem war dass ich mit ohne recv() nicht feststellen konnte ob eine Verbindung geschlossen ist. Recv() wollte ich nicht verwenden, da ich dann die Daten ja schon hätte, und das Abrufen von Daten soll ja schließlich der Nutzer des Wrappers und nicht der Wrapper machen... Lösung:<br />
1.) Ich habe einen Observer für die Sockets eingebaut, der über neue Daten informiert wird. Somit kann ich sicher gehen DASS recv() auch aufgerufen wird wenn Daten anliegen, .. oder eine Verbindung geschlossen wurde und es nur nach Daten ausschaut.</p>
<p>2.) Die recv() Methode des Wrapper-Sockets deligiert die Operation natürlich an die API, schaut aber auf den Rückgabewert [if(return_value==SOCKET_ERROR){...}] und erkennt somit geschlossene Verbindungen. Soweit so gut, interessant ist jetzt aber noch die Frage wie das &quot;Select-Aufrufende-Socket-Verwaltende&quot;-Objekt von der geschlossenen Verbindung informiert wird... auch umständlich über callbacks?<br />
NEIN, einfach indem der API-Socket [SOCKET==int] geschlossen wird <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="😃"
    /><br />
-&gt; dadurch fällt er bei der Überprüfung vor dem nächsten select() auf und wird erst gar nicht in das fdSet eingetragen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Da das den User des Wrapper evtl. interessiert wird zudem noch eine abstrakte Callback-Methode aufgerufen, die von den abgeleiteten Klassen wie z.B. dem ClientSocket überschrieben werden muss. [Muss, da der Socket auch in dieser Methode geschlossen werden muss, ... da nicht jeder Socket API socket() verwendet sondern über API accept() einen Wert zugewisen bekommt wollte ich das Schließen der Sockets auch in den abgeleiteten Socket Klassen lassen)<br />
[Wobei es vieleicht trotzdem sinnvoller wäre dies in der recv() Methode der Basis-Socket-Klasse vorzunehmen, was meint ihr?]</p>
<p>PS.: Ich bin's übrigens.. &quot;sowieso&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
PPS.: Verbesserungsvorschläge? <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021363</guid><dc:creator><![CDATA[Kernel_Panic]]></dc:creator><pubDate>Tue, 21 Mar 2006 21:11:05 GMT</pubDate></item></channel></rss>