<?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 select mit unerklärlichen Absturz...]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>Die unten stehende Funktion macht mir einige Problemchen. Wenn die Funktion mit 0 zurückkehr wird ein neuer Thread gestartet der den neuen Client mit accept annimmt und komplett im Thread bearbeitet.<br />
Leider ist das Problem, das diese Funktion an der letzten!!! Klammer mit einer Access violation (reading) 0xfdfdfdfd verläßt. Ohne Debugger schmiert der Server ohne einen Mucks ab, weder Fehlermeldung noch sonstiges!<br />
Release und Debugger bleibt er irgendwo in einer Mutexsache (lock / unlock) stecken.</p>
<p>Hat hierfür irgendeine Lösung oder erklärung?</p>
<p>Betreffende Funktion:</p>
<pre><code class="language-cpp">int socket_select(SOCKINFO &amp;sockinfo)
	{
		if(sockinfo.socket != INVALID_SOCKET)
		{
			FD_SET fd_read;
			FD_ZERO(&amp;fd_read);
			FD_SET(sockinfo.socket, &amp;fd_read);

			if(SOCKET_ERROR == select(NULL, &amp;fd_read, NULL, NULL, NULL))
			{
				return WSAGetLastError();
			}

			if(FD_ISSET(sockinfo.socket, &amp;fd_read))
			{
				return 0;
			}
			return 1;
		}
		return 1;
	} // Hier schmiert er im Debugmodus im Debugger ab.
</code></pre>
<p>Der Aufruf:</p>
<pre><code class="language-cpp">while(true)
			{
				if(!socket_select(server))
				{
					CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
				}
			}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/174589/socket-select-mit-unerklärlichen-absturz</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 14:44:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174589.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Feb 2007 20:12:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Wed, 28 Feb 2007 20:12:44 GMT]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>Die unten stehende Funktion macht mir einige Problemchen. Wenn die Funktion mit 0 zurückkehr wird ein neuer Thread gestartet der den neuen Client mit accept annimmt und komplett im Thread bearbeitet.<br />
Leider ist das Problem, das diese Funktion an der letzten!!! Klammer mit einer Access violation (reading) 0xfdfdfdfd verläßt. Ohne Debugger schmiert der Server ohne einen Mucks ab, weder Fehlermeldung noch sonstiges!<br />
Release und Debugger bleibt er irgendwo in einer Mutexsache (lock / unlock) stecken.</p>
<p>Hat hierfür irgendeine Lösung oder erklärung?</p>
<p>Betreffende Funktion:</p>
<pre><code class="language-cpp">int socket_select(SOCKINFO &amp;sockinfo)
	{
		if(sockinfo.socket != INVALID_SOCKET)
		{
			FD_SET fd_read;
			FD_ZERO(&amp;fd_read);
			FD_SET(sockinfo.socket, &amp;fd_read);

			if(SOCKET_ERROR == select(NULL, &amp;fd_read, NULL, NULL, NULL))
			{
				return WSAGetLastError();
			}

			if(FD_ISSET(sockinfo.socket, &amp;fd_read))
			{
				return 0;
			}
			return 1;
		}
		return 1;
	} // Hier schmiert er im Debugmodus im Debugger ab.
</code></pre>
<p>Der Aufruf:</p>
<pre><code class="language-cpp">while(true)
			{
				if(!socket_select(server))
				{
					CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
				}
			}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1237060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237060</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Wed, 28 Feb 2007 20:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Wed, 28 Feb 2007 21:39:13 GMT]]></title><description><![CDATA[<p>Wenn Du mit asynchronen Sockets arbeitest, steigt er Dir hier:</p>
<pre><code class="language-cpp">if(SOCKET_ERROR == select(NULL, &amp;fd_read, NULL, NULL, NULL))
{
  return WSAGetLastError();
}
</code></pre>
<p>immer aus. Das liegt daran, dass <em>select</em> als 'potentiell blockierend' eingestuft wird. Du solltest also vorher das Flag <em>WSAWOULDBLOCK</em> ausschließen. Könnte sein, dass es dadurch zu Folgefehlern kommt, weiß aber nicht, ob das Dein Problem lößt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237121</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 28 Feb 2007 21:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Wed, 28 Feb 2007 22:02:47 GMT]]></title><description><![CDATA[<p>Ich arbeite nicht mit asynchronen Sockets, ich habe zwar eine Möglichkeit dafür eingebaut, nutze sie aber nicht.</p>
<p>Wie gesagt ist das phänomen unerklärlich, über das lokale netzwerk kackt er aber wesentlich seltener ab als mit localhost. (???)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237133</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Wed, 28 Feb 2007 22:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 13:39:11 GMT]]></title><description><![CDATA[<p>Hm rufst Du diese Funktion, denn wieder in einer Funktion auf `?<br />
Wie und wo ist die übergebene Variable 'sockinfo' definiert (ggf.: initialisiert)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237460</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 01 Mar 2007 13:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 14:36:02 GMT]]></title><description><![CDATA[<p>Nun, initialisiert wird es mit</p>
<pre><code class="language-cpp">typedef struct _SOCKINFO
	{
		SOCKET socket;
		SOCKADDR_IN addr;
		int addr_size;
	}SOCKINFO;

int socket_init()
	{
		WSAData wsa;
		if(WSAStartup(MAKEWORD(2, 0), &amp;wsa) != 0)
			return 1;
		else
			return 0;
	}

int socket_listen(SOCKINFO &amp; sockinfo, const int port)
	{
		sockinfo.socket = INVALID_SOCKET;

		if(INVALID_SOCKET == (sockinfo.socket = socket(AF_INET, SOCK_STREAM, 0)))
		{
			return WSAGetLastError();
		}

		memset(&amp;sockinfo.addr, 0, sizeof(sockinfo.addr));
		sockinfo.addr.sin_family = AF_INET;
		sockinfo.addr.sin_port = htons(port);

		if(SOCKET_ERROR == bind(sockinfo.socket, (SOCKADDR*)&amp;sockinfo.addr, sizeof(sockinfo.addr)))
		{
			return WSAGetLastError();
		}

		if(SOCKET_ERROR == listen(sockinfo.socket, 20))
		{
			return WSAGetLastError();
		}

		return 0;
	}

int socket_accept(SOCKINFO &amp;sockinfo, SOCKINFO &amp;new_sockinfo)
	{
		if(sockinfo.socket != INVALID_SOCKET)
		{
			new_sockinfo.socket = INVALID_SOCKET;
			new_sockinfo.addr_size = sizeof(new_sockinfo.addr);

			if(INVALID_SOCKET == (new_sockinfo.socket = accept(sockinfo.socket, (SOCKADDR*)&amp;new_sockinfo.addr, &amp;new_sockinfo.addr_size)))
			{
				return WSAGetLastError();
			}
			return 0;
		}
		return 1;
	}
</code></pre>
<p>socket_select(...) läuft in einer quasi endlosschleife (blockierend), sobald es zuckt wird socket_accept aufgerufen (in einem Thread)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237526</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Thu, 01 Mar 2007 14:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 14:48:38 GMT]]></title><description><![CDATA[<p>kannst du eventuell noch die schleife präsentieren und versuchen herauszufinden wogenau das &quot;abstürzt&quot; und mit welchem WSAGetLastError()</p>
<p>bisher find ich siehst nämlich ganz OK aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237537</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 01 Mar 2007 14:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 16:05:50 GMT]]></title><description><![CDATA[<p>Der Witz ist, bis zum WSAGetLastError() kommt der nie, das ganze Programm geht nämlich vorher flöten, ohne einen Ton zu sagen. Es beendet sich einfach so!!!</p>
<p>Die Schleife sieht man oben schon mal, mehr ist das nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237597</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Thu, 01 Mar 2007 16:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 18:21:14 GMT]]></title><description><![CDATA[<p>stepp das doch mal mit dem debugger durch und schau wo es dich rauswirft, btw. mach doch kontrollausschrifften zu jedem methodenaufruf ne ausgabe z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237655</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 01 Mar 2007 18:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Thu, 01 Mar 2007 18:40:18 GMT]]></title><description><![CDATA[<p>Bilder sprechen mehr als tausend worte, daher mal ein Link wo er abkackt.<br />
<a href="http://virtualdreamsdd.dyndns.org/debug.png" rel="nofollow">http://virtualdreamsdd.dyndns.org/debug.png</a><br />
Im Release Modus stürzte er jetzt komischweise grad mal nicht ab.</p>
<p>Hab Debugausgaben, nur beim Server kann man sie nicht mehr lesen so schnell ist er weg, bzw hängt es nicht an der Funktion, sondern an etwas anderem wie man auf dem Bild sehen kann. Hab im DOS Fenster ausgaben zum WSAGetLastError() und MessagesBoxen für da wo er grad ist, die kommen aber nie, also kackt er vorher ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237670</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Thu, 01 Mar 2007 18:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 12:34:47 GMT]]></title><description><![CDATA[<p>VirtualDreams schrieb:</p>
<blockquote>
<p>Wenn die Funktion mit 0 zurückkehr wird ein neuer Thread gestartet der den neuen Client mit accept annimmt und komplett im Thread bearbeitet.</p>
</blockquote>
<p>Wieviele Threads werden im Debug-Fenster unten links angezeigt in dem Augenblick wo die Exception ausgelöst wird ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238042</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 12:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 13:16:07 GMT]]></title><description><![CDATA[<p>2 stück:</p>
<pre><code>3520	__tmainCRTStartup	   std::_Lockit::~_Lockit	Normal	0
&gt;	2476	__tmainCRTStartup	   _unlock	                  Normal	0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238065</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 13:34:24 GMT]]></title><description><![CDATA[<p>VirtualDreams schrieb:</p>
<blockquote>
<p>2 stück</p>
</blockquote>
<p>Das bedeutet ja, dass ein Client &quot;angebissen&quot; hat, der Server ein Thread erzeugt und daraufhin abstürzt.</p>
<p>Kannst Du mal die &quot;ClientProc&quot; von &quot;CreateThread(NULL, NULL, ClientProc, this, NULL, NULL)&quot; posten ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238078</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 15:09:08 GMT]]></title><description><![CDATA[<p>Jup, anbeisen tut er ^^ Aber hier der gewünschte code:</p>
<pre><code class="language-cpp">int SmartSockServer::Run()
	{
		SOCKINFO client;
		char buffer[256];
		char text[256];
		int res;
		int bytes;
		int number;

		if((res = socket_accept(server, client)))
			return res;
		else
		{
			LeaveCriticalSection(&amp;crit);

			socket_recv(client, buffer, 256, bytes);
			buffer[bytes] = '\0';
			sscanf_s(buffer, &quot;%i %s&quot;, &amp;number, text);
			if(number == 100)
			{
				if(strstr(text, &quot;admin&quot;) == 0)
				{
					MessageBox(NULL, &quot;USER OK&quot;, &quot;Debug&quot;, NULL);
					sprintf_s(buffer, 256, &quot;%i&quot;, 110);
					socket_send(client, buffer, 256, (int)strlen(buffer));
					socket_recv(client, buffer, 256, bytes);
					buffer[bytes] = '\0';
					sscanf_s(buffer, &quot;%i %s&quot;, &amp;number, text);
					if(number == 130)
					{
						if(strstr(text, &quot;admin&quot;) == 0)
						{
							sprintf_s(buffer, 256, &quot;%i&quot;, 140);
							socket_send(client, buffer, 256, (int)strlen(buffer));
							MessageBox(NULL, &quot;PASS OK&quot;, &quot;Debug&quot;, NULL);
						}
						else
						{
							sprintf_s(buffer, 256, &quot;%i&quot;, 150);
							socket_send(client, buffer, 256, (int)strlen(buffer));
							socket_close(client);
							MessageBox(NULL, text, &quot;PASS NOT OK&quot;, NULL);
							return 0;
						}
					}
				}
				else
				{
					sprintf_s(buffer, 256, &quot;%i&quot;, 120);
					socket_send(client, buffer, 256, (int)strlen(buffer));
					socket_close(client);
					MessageBox(NULL, text, &quot;USER NOT OK&quot;, NULL);
					return 0;
				}
			}
		}
		MessageBox(NULL, &quot;We leave te thread&quot;, &quot;Debug&quot;, NULL);
		return 0;
	}

	DWORD WINAPI ClientProc(LPVOID param)
	{
		SmartSockServer *server = (SmartSockServer*)param;
		if(server)
			server-&gt;Run();
		return 0;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238156</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 15:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 15:28:01 GMT]]></title><description><![CDATA[<p>entweder ich bin blind oder du hast das select schon irgendwie rausgenommen, weil ich kann nirgends den aufruf von socket_select entdecken, btw. in deinen vorherigen posts .... desweiteren ist mir ne kleinigkeit bei deinem socket_accept aufgefallen,</p>
<pre><code class="language-cpp">if(INVALID_SOCKET == (new_sockinfo.socket = accept(sockinfo.socket, (SOCKADDR*)&amp;new_sockinfo.addr, &amp;new_sockinfo.addr_size)))
            {
                return WSAGetLastError();
            }
</code></pre>
<p>mach doch mal testhalber 2 zeilen draus</p>
<pre><code class="language-cpp">new_sockinfo.socket = accept(sockinfo.socket, (SOCKADDR*)&amp;new_sockinfo.addr, &amp;new_sockinfo.addr_size);
            if(INVALID_SOCKET == new_sockinfo.socket)
            {
                return WSAGetLastError();
            }
</code></pre>
<p>denn WENN rein zufällig</p>
<p>INVALID_SOCKET == true auch true ergibt könnte eventuell dein programm bei</p>
<pre><code class="language-cpp">if((res = socket_accept(server, client)))
            return res;
        else
</code></pre>
<p>aussteigen weil WSAGetLastError() 0 zurückgibt wenn es keinen fehler gibt.</p>
<p>kleinen moment ....</p>
<p>(res = socket_accept(server, client)) ist immer true !!!<br />
dein programm dürfte theoretisch gar nciht über das return res in deiner run() hinwegkommen</p>
<p>oder hab ich grad alles verpeilt ??<br />
... oder wars INVALID_SOCKET ?? mist leider kann man beim AW schreiben die seiten nicht blättern um code zu kopieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238161</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Fri, 02 Mar 2007 15:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 15:48:53 GMT]]></title><description><![CDATA[<p>ok, ich probier das mal aus, ich mach mal 2 zeilem draus.<br />
Hier noch mal die vergessene Funktion von vorhin:</p>
<pre><code class="language-cpp">int SmartSockServer::Accept()
	{
		if(!socket_isvalid(server))
		{
			while(!socket_isvalid(server))
			{
				if(!socket_select(server))
				{
					EnterCriticalSection(&amp;crit);
					CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
					MessageBox(NULL, &quot;New thread&quot;, &quot;Debug&quot;, NULL);
				}
			}
		}
		MessageBox(NULL, &quot;OK, we lost the server&quot;, &quot;Debug&quot;, NULL);
		return 1;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238163</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 15:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 15:49:12 GMT]]></title><description><![CDATA[<p>Hab es mal auf 2 Zeilen gemacht, das problem besteht trotzdem an der selben stelle.</p>
<pre><code class="language-cpp">if((res = socket_accept(server, client))) 
            return res; 
        else 
        { 
            LeaveCriticalSection(&amp;crit); 

            socket_recv(client, buffer, 256, bytes); 
            buffer[bytes] = '\0'; 
            sscanf_s(buffer, &quot;%i %s&quot;, &amp;number, text); //hier oder
            if(number == 100) //hier hauts den karren an die wand, da steigt er aus wie es oben auf dem bild zu sehen ist
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238173</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 15:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 17:37:37 GMT]]></title><description><![CDATA[<p>Probier mal ob Du die &quot;ClientProc&quot; aufrufen kannst ohne dass der Server dabei abstürzt :</p>
<pre><code class="language-cpp">// CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
 ClientProc (this);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238243</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 17:37:37 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 17:48:08 GMT]]></title><description><![CDATA[<p>Er stirbt mit der selben Accessviolation (0xfdfdfdfd)</p>
<pre><code class="language-cpp">if(!socket_select(server))
				{
					//EnterCriticalSection(&amp;crit);
					//CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
					ClientProc(this);
					MessageBox(NULL, &quot;New thread&quot;, &quot;Debug&quot;, NULL);
				}
</code></pre>
<p>in dem Bereich. Er kann auserdem nichts mehr an Sourcecode aufrufen, nur Disassembly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238249</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 17:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 18:14:15 GMT]]></title><description><![CDATA[<p>Stürzt der Server auch ab wenn in der &quot;ClientProc&quot; &quot;nichts&quot; drinsteht :</p>
<pre><code class="language-cpp">DWORD WINAPI ClientProc(LPVOID param)
{

 return 0;
}
</code></pre>
<p>Falls nicht, dann das gleiche nochmal mit :</p>
<pre><code class="language-cpp">DWORD WINAPI ClientProc(LPVOID param)
{
 SmartSockServer *server = new (SmartSockServer);

 delete (server); 

 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238257</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 18:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 18:49:50 GMT]]></title><description><![CDATA[<p>Mit beiden Methoden probiert und stürzt <strong>nicht</strong> ab, da der Client aber nicht angenommen wird kommt immer wieder die anfrage rein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238269</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 18:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 19:20:58 GMT]]></title><description><![CDATA[<p>Gibt wohl ein Problem mit der Threaderzeugung. Probier jetzt so :</p>
<pre><code class="language-cpp">...

if(!socket_select(server))
{
 EnterCriticalSection(&amp;crit);
 CreateThread(NULL, NULL, ClientProc, this, NULL, NULL);
// ClientProc(this);
 MessageBox(NULL, &quot;New thread&quot;, &quot;Debug&quot;, NULL);
} 

...

DWORD WINAPI ClientProc(LPVOID param)
{
 // erstmal &quot;leer&quot;
 return 0;
}
</code></pre>
<p>Wenns läuft, dann so :</p>
<pre><code class="language-cpp">...

DWORD WINAPI ClientProc(LPVOID param)
{
 SmartSockServer *server = (SmartSockServer*)param;
 if(server)
    server -&gt; Run (); 
 return 0;
} 

...

int SmartSockServer::Run()
{
// erstmal &quot;leer&quot;

 MessageBox(NULL, &quot;We leave te thread&quot;, &quot;Debug&quot;, NULL);
 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238279</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 19:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 19:26:34 GMT]]></title><description><![CDATA[<p>OK, das geht auch einwandfrei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238281</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 19:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 19:53:55 GMT]]></title><description><![CDATA[<p>Sehr gut, nun schrittweise weiter :</p>
<pre><code class="language-cpp">int SmartSockServer::Run()
{
 SOCKINFO client;
 char buffer[256];
 char text[256];
 int res;
 int bytes;
 int number;

 if((res = socket_accept(server, client)))
  return res;
 else
 {
// hier &quot;leer&quot;
 }

 MessageBox(NULL, &quot;We leave te thread&quot;, &quot;Debug&quot;, NULL);
 return 0;
}
</code></pre>
<p>Wenns läuft dann :</p>
<pre><code class="language-cpp">...
 else
 {
  LeaveCriticalSection(&amp;crit);

 }
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238287</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 19:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 20:12:53 GMT]]></title><description><![CDATA[<p>OK, auch das funktioniert einwandfrei.</p>
<p>Hab langsam das gefühl das eine string funktion nicht threadsafe ist, oder vlt doch was anderes?</p>
<p>Bin jetzt selbst soweit gekommen:</p>
<pre><code class="language-cpp">int SmartSockServer::Run()
	{
		SOCKINFO client;
		char buffer[256];
		char text[256];
		int res;
		int bytes;
		int number;

		if((res = socket_accept(server, client)))
			return res;
		else
		{
			LeaveCriticalSection(&amp;crit);

			socket_recv(client, buffer, 256, bytes);
			buffer[bytes] = '\0';
			//sscanf_s(buffer, &quot;%i %s&quot;, &amp;number, text); //&lt;--- ab der schmiert er ab im Debugbuild!!!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238292</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 20:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 21:04:06 GMT]]></title><description><![CDATA[<p>Hab mal ein wenig nachgelesen:</p>
<pre><code class="language-cpp">char buffer[256];
char text[256];
sscanf_s(buffer, &quot;%i %s&quot;, &amp;number, text, sizeof(text)); // &lt;-- sizeof fehlte
</code></pre>
<p>und jetzt stürzt er vorerst nicht mehr ab ^^. Das sizeof() hab ich aber bisher noch nie wo gesehen... O_o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238320</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 02 Mar 2007 21:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Socket select mit unerklärlichen Absturz... on Fri, 02 Mar 2007 21:58:55 GMT]]></title><description><![CDATA[<p>Dann hat also sscanf_s () über die Grösse von &quot;text&quot; hinausgelesen und dadurch die Exception ausgelöst.</p>
<p>Verhindern lässt sich das durch sizeof () als letzten Parameter ?</p>
<p>Aha.</p>
<p>Prüfe unbedingt mal ob sprintf_s () auch solche Überraschungen bereithält. <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/1238336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238336</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 21:58:55 GMT</pubDate></item></channel></rss>