<?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[unerklärliches Verhalten??]]></title><description><![CDATA[<p>Hi,<br />
Ich habe mir mal ein kleines Programm zusammengeschrieben, welches allerdings ein für mich unerklärliches verhalten hervorruft:</p>
<pre><code class="language-cpp">int main(void)
{
	signal(SIGPIPE, pipe_error_handler); // redirect Pipe-errors to custom handler to prevent Program from termination (send() signals a broken pipe if peer is closed)	
	Server = new TCPServer(4000, &amp;error_handler ,&amp;recv_handler); //Server is global
	Server-&gt;startServer();
	while(true)
	{
		string input;
		cin &gt;&gt; input;
		Server-&gt;sendMsg(input.c_str(),input.length());
	}
}
</code></pre>
<p>die sendMsg-funktion:</p>
<pre><code class="language-cpp">void TCPServer::sendMsg(const char *toSend, const int len) 
	{
		cout &lt;&lt; &quot;---&quot; &lt;&lt; endl;
	}
</code></pre>
<p>Als Ausgabe erhalte ich auf der Konsole immer eine konstante folge von 3 bindestriche pro zeile</p>
<p>Ich weiß aber nich woran das liegt (da ja <code>std::cin</code> normalerweise blockierend ist)... ich hoffe es kann mir jemand von euch helfen</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261532/unerklärliches-verhalten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 04:31:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261532.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Feb 2010 19:04:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 19:04:28 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ich habe mir mal ein kleines Programm zusammengeschrieben, welches allerdings ein für mich unerklärliches verhalten hervorruft:</p>
<pre><code class="language-cpp">int main(void)
{
	signal(SIGPIPE, pipe_error_handler); // redirect Pipe-errors to custom handler to prevent Program from termination (send() signals a broken pipe if peer is closed)	
	Server = new TCPServer(4000, &amp;error_handler ,&amp;recv_handler); //Server is global
	Server-&gt;startServer();
	while(true)
	{
		string input;
		cin &gt;&gt; input;
		Server-&gt;sendMsg(input.c_str(),input.length());
	}
}
</code></pre>
<p>die sendMsg-funktion:</p>
<pre><code class="language-cpp">void TCPServer::sendMsg(const char *toSend, const int len) 
	{
		cout &lt;&lt; &quot;---&quot; &lt;&lt; endl;
	}
</code></pre>
<p>Als Ausgabe erhalte ich auf der Konsole immer eine konstante folge von 3 bindestriche pro zeile</p>
<p>Ich weiß aber nich woran das liegt (da ja <code>std::cin</code> normalerweise blockierend ist)... ich hoffe es kann mir jemand von euch helfen</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858368</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 19:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 19:10:29 GMT]]></title><description><![CDATA[<p>versuchs mal mit std::cin.ignore(std::numeric_limits<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max(), '\n'); innerhalb der while-schleife. std-header 'limits' einbinden nicht vergessen <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>warum erstellst du einen std::string, übergibst der memberfunktion dann aber doch nur den cstring? nen const std::string&amp; zu übergeben spart dir nervige c_str()-aufrufe und den zweiten funktionsparameter <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/1858378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858378</guid><dc:creator><![CDATA[vielleicht so]]></dc:creator><pubDate>Fri, 19 Feb 2010 19:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 19:15:25 GMT]]></title><description><![CDATA[<p>vielleicht so schrieb:</p>
<blockquote>
<p>versuchs mal mit std::cin.ignore(std::numeric_limits<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max(), '\n'); innerhalb der while-schleife.</p>
</blockquote>
<p>Leider keine Änderung. Es passiert genau das selbe wie vorher <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/1858379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858379</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 19:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 19:22:35 GMT]]></title><description><![CDATA[<p>Ach ja, die funktion sendMsg() wird NUR in der Schleife aufgerufen, sonst nirgends.</p>
<p>vielleicht so schrieb:</p>
<blockquote>
<p>warum erstellst du einen std::string, übergibst der memberfunktion dann aber doch nur den cstring?</p>
</blockquote>
<p>Weil nicht nur std::strings übergeben werden können sondern auch &quot;rohe&quot; daten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858381</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 19:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 22:39:24 GMT]]></title><description><![CDATA[<p>Da nicht bekannt ist, was in den Serverklassen noch so passiert, probier mal</p>
<pre><code class="language-cpp">void sendMsg(const char *toSend, const int len)
{
    cout &lt;&lt; &quot;---&quot; &lt;&lt; endl;
}

int main(int argc, char *argv[])
{
    while(true)
    {
        string input;
        cin &gt;&gt; input;
        sendMsg(input.c_str(),input.length());
    } 

    return 0;
}
</code></pre>
<p>Denn das sollte ohne Schnickschnack scho funktionieren.<br />
Ansonsten sollte man mal den Debugger fragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858442</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 19 Feb 2010 22:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 22:45:26 GMT]]></title><description><![CDATA[<p>Leider genau das selbe Ergebnis <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="😞"
    /><br />
Ich weiß schon wirklich nicht mehr woran das liegen kann<br />
In einem 2ten Programm funktioniert es genau wie es soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858445</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 22:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 22:52:40 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du mal beim Compilierungsvorgang ALLES neu erstellen. (oder Debug-ordner löschen)<br />
Das wirkt oft Wunder, falls du es nicht schon probiert hast.</p>
<p>Oder <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="😃"
    /> du sicherst dir deine .h und .cpp weg, löschst dein Projekt und erstellst es neu.</p>
<p>Ansonsten wüsst ich auch nicht. <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/1858448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858448</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 19 Feb 2010 22:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 23:09:22 GMT]]></title><description><![CDATA[<p>Hab ich schon gemacht.<br />
Gibts einen Debug-Ordner bei g++??<br />
Wenn ich das ganze TCPServer Zeug auskommentier dann funktionierts.<br />
Aber ich weiß nicht warum es mit nicht funktioniert, da die Funktion wirklich nur an der einen stelle im ganzen Projekt aufgerufen wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858453</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 23:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 23:15:22 GMT]]></title><description><![CDATA[<p>Erst hieß es doch:</p>
<p>Unbekannt schrieb:</p>
<blockquote>
<p>Leider genau das selbe Ergebnis <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="😞"
    /><br />
Ich weiß schon wirklich nicht mehr woran das liegen kann<br />
In einem 2ten Programm funktioniert es genau wie es soll.</p>
</blockquote>
<p><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="😃"
    /> und nun heißt es also doch</p>
<p>Unbekannt schrieb:</p>
<blockquote>
<p>Wenn ich das ganze TCPServer Zeug auskommentier dann funktionierts.</p>
</blockquote>
<p>Da hast du ja schonmal nen Anhaltspunkt. Aber wie die Klasse nun so<br />
Aussieht und was sie beinhaltet, weiß niemand <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/1858455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858455</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 19 Feb 2010 23:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 23:25:34 GMT]]></title><description><![CDATA[<p>BasicMan01 schrieb:</p>
<blockquote>
<p>Aber wie die Klasse nun so<br />
Aussieht und was sie beinhaltet, weiß niemand <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>
</blockquote>
<p>Naja, ich weiß wie sie aussieht <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 />
aber ich weiß nicht ob es sinn macht jetzt die ganze klasse hier zu posten ...</p>
<p>naja versuchen kann ichs ja mal:<br />
header:</p>
<pre><code class="language-cpp">/*************
Includes
*************/
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;signal.h&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;queue&gt;

#include &lt;netdb.h&gt; //for gethostbyname()

#include &lt;iostream&gt;
#include &lt;errno.h&gt;

/************
Class-Deklaration
************/

/**************
INFO:
	this class uses error-codes in this way : 0xA***, where *** is the actual code;
***************/
using namespace std;

class TCPServer
{
	public:
		TCPServer(short port,void (*errorfct)(const string, const int, const char), void (*functPtr)(const char *, const int));
		~TCPServer();
		bool startServer();
		void closeServer();
		void sendMsg(const char *toSend, const int len); //sends toSend buffer (if not everything could be sent the function tries to send the rest of the buffer)

		void *readThread();	//should be private
		void *writeThread();	//as above
		void *doListen();	//as above

	private:

		void listenSock(void);

		void (*readPtr)(const char *, const int);
		void (*signal_error)(const string, const int, const char); //params: string = message, int = error-code, char = priority

		int socket_fd, new_socket_fd;
		struct sockaddr_in sin;

		pthread_t readThreadid;
		pthread_t writeThreadid;

		pthread_mutex_t shutdownmutex;
		bool shutdown;

		struct dataWrapper
		{
			char data[1024];
		};

		pthread_mutex_t writebuffermutex;
		queue &lt;dataWrapper&gt; writebuffer;

		pthread_cond_t startSending;		

};
</code></pre>
<p>und die implementierung:</p>
<pre><code class="language-cpp">#include &quot;TCP_server.hpp&quot;

	static void *_readThread(void *This);	//prototypes for static functions
	static void *_writeThread(void *This);
	static void *_listenThread(void *This);

	TCPServer::TCPServer(short port,void (*errorfct)(const string, const int ,const char ),void (*funct)(const char *, const int))
	{
		readPtr = funct;
		signal_error = errorfct;
		if(pthread_mutex_init(&amp;shutdownmutex,NULL)!=0)
		{
			signal_error(&quot;could not initialize 'shutdownmutex'&quot;,0xA012,2);
		}
		if(pthread_mutex_init(&amp;writebuffermutex,NULL)!=0)
		{
			signal_error(&quot;could not initialize 'writebuffermutex'&quot;,0xA013,2);
		}
		shutdown = false;
		if(pthread_cond_init (&amp;startSending,NULL)!=0)
		{
			signal_error(&quot;could not initialize 'startSending'-signal&quot;,0xA014,2);
		}

		sin.sin_family = AF_INET;		//set protocol family to Internet 
		sin.sin_port = htons(port);		// set port no. 
		sin.sin_addr.s_addr  = INADDR_ANY;	// set IP addr to any interface 

		writeThreadid = 0;
		readThreadid = 0;
	}

	TCPServer::~TCPServer()
	{
		closeServer();
		pthread_mutex_destroy(&amp;shutdownmutex);
		pthread_mutex_destroy(&amp;writebuffermutex);
		pthread_cond_destroy(&amp;startSending);
	}

	bool TCPServer::startServer()
	{
		if ( (socket_fd = socket(AF_INET, SOCK_STREAM, 0 ) ) &lt; 0) { // create socket
			signal_error(&quot;could not create socket&quot;,0xA001,1); // heavy error (retry startServer)
			return false;
		}
		int opt = 1; 
  		if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&amp;opt, sizeof(opt)) &lt; 0) { 
    			signal_error(&quot;execution of 'setsockopt' failed&quot; ,0xA00F, 3);
  		}
		//then bind it to my address and specified port num
		if (bind(socket_fd, (struct sockaddr *)&amp;sin, sizeof(sin) ) &lt; 0 ){
			signal_error(&quot;could not bind socket to port&quot;,0xA002,1); // heavy error
			return false;
		}
		if (listen(socket_fd, 1)) 
		{ 
    			signal_error(&quot;error while listening&quot;,0xA003,1); // listen error (heavy)
		}
		listenSock();
		return true;		
	}

	void TCPServer::closeServer(void)
	{
		pthread_mutex_lock(&amp;shutdownmutex);
		shutdown = true;
		pthread_mutex_unlock(&amp;shutdownmutex);

		pthread_cond_signal(&amp;startSending); // tell the sending thread to shut down (if it is stuck waiting for signal)

		if(pthread_kill(writeThreadid,0) == 0) //check if writeThread is still alive - if so kill it
		{
			signal_error(&quot;writeThread was not closed properly&quot;,0xA00A,3); //not fatal, but still an error
			if(pthread_cancel(writeThreadid)!=0)
			{
				signal_error(&quot;writeThread could not be force-closed&quot;,0xA00B,3); //not fatal, but still an error
			}
		}
		if(pthread_kill(readThreadid,0) == 0) //check if readThread is still alive - if so kill it
		{
			signal_error(&quot;readThread was not closed properly&quot;,0xA00C,3); //not fatal, but still an error
			if(pthread_cancel(readThreadid)!=0)
			{
				signal_error(&quot;readThread could not be force-closed&quot;,0xA00D,3); //not fatal, but still an error
			}
		}

		close(new_socket_fd);
		close(socket_fd);
	}

	void TCPServer::sendMsg(const char *toSend, const int len) //Might be faster when signaling everytime the buffer is filled (at least if len is very big)
	{

		cout &lt;&lt; &quot;---&quot; &lt;&lt; endl;
		/*if(writeThreadid &gt; 0)
		{
			int packetBytes = 0;
			do
			{
				dataWrapper myData;
				memset(myData.data,0,sizeof(myData.data));
				strncpy(myData.data,&amp;toSend[packetBytes], len&lt;=1024?len:1024 );
				packetBytes += 1024;
				pthread_mutex_lock(&amp;writebuffermutex);   // lock write-buffer
				writebuffer.push(myData);
				pthread_mutex_unlock(&amp;writebuffermutex); // unlock write-buffer
			}
			while(len &gt; packetBytes);

			pthread_cond_signal(&amp;startSending); // tell the writing thread that the buffer has been filled
		}
		else
		{
			signal_error(&quot;Not connected to client&quot;,0xA011,4);
		}*/
	}

	void TCPServer::listenSock(void)
	{
		pthread_t listenThread;
		if(pthread_create(&amp;listenThread,NULL,_listenThread,this))
		{
			signal_error(&quot;ERROR: could not create listenThread&quot;,0xA00E ,1); // almost fatal error (could be solved by retrying)
		}
	}

	void *TCPServer::doListen()
	{
		if(writeThreadid &gt; 0)
		{
			pthread_join(writeThreadid,NULL);
		}
		if(readThreadid &gt; 0)
		{
			pthread_join(readThreadid,NULL);
		}

		writeThreadid = 0;
		readThreadid = 0;

		while(!writebuffer.empty()) //empty buffer
		{
			writebuffer.pop();
		}

		if (close(new_socket_fd) &lt; 0) {
			signal_error(&quot;error closing socket&quot;,0xA008,3); //not fatal, but still an error
		}
		unsigned int sinlen = sizeof(sin);
		if ( (new_socket_fd = accept(socket_fd, (struct sockaddr *) &amp;sin, &amp;sinlen) ) &lt; 0 )
		{
  			signal_error(&quot;error accepting client&quot;,0xA004,2);  //medium error
		}
		pthread_mutex_lock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
		shutdown = false;			// prevent threads from closing immediately
		pthread_mutex_unlock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;

		if(pthread_create(&amp;writeThreadid,NULL,_writeThread,this))
		{
			signal_error(&quot;could not create writeThread&quot;,0xA006,1);
		}

		if(pthread_create(&amp;readThreadid,NULL,_readThread,this))
		{
			signal_error(&quot;could not create readThread&quot;,0xA005,1);
		}

		return 0; 
	}

	void *TCPServer::readThread(void)
	{
		pthread_mutex_lock(&amp;shutdownmutex);
		while(!shutdown)
		{
			pthread_mutex_unlock(&amp;shutdownmutex);	// unlock variable &quot;shutdown&quot;
			char msg[1024];
			int status = recv(new_socket_fd, msg, sizeof(msg),0 ); // read message from client 

			if(status &lt;= 0) // client closed transmission or an error occured
			{
				if(status &lt; 0) //error
				{
					signal_error(&quot;error receiving from client&quot;,0xA007,3);
     					//cout &lt;&lt; strerror(errno) &lt;&lt; endl;
				}
				else
				{
					signal_error(&quot;connection closed by client&quot;,0xA010,4);
				}
				//cout &lt;&lt; &quot;connection closed&quot; &lt;&lt; endl;
				pthread_mutex_lock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
				shutdown = true;			// close threads properly
				pthread_mutex_unlock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
			}
			else
			{
				readPtr(msg,status);
			}
			pthread_mutex_lock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
		}
		pthread_mutex_unlock(&amp;shutdownmutex); // unlock variable &quot;shutdown&quot;

		pthread_cond_signal(&amp;startSending); // tell the other thread to shut down
		listenSock(); //restart Threads
		return 0;
	}

	void *TCPServer::writeThread(void)
	{
		pthread_mutex_lock(&amp;shutdownmutex);
		while(!shutdown)
		{
			pthread_mutex_unlock(&amp;shutdownmutex);	// unlock variable &quot;shutdown&quot;

			char toSend[1024];
			char *pos = toSend;
			int bytesSent = 0;

			pthread_mutex_lock(&amp;writebuffermutex);   // lock write-buffer
			if(writebuffer.empty())
			{
				pthread_cond_wait(&amp;startSending, &amp;writebuffermutex); // wait for send() function to signal filled buffer
			}
			if(!writebuffer.empty()) // if writebuffer is still empty, it received the signal an should shut down
			{
				strncpy(toSend,writebuffer.front().data,1024);
				writebuffer.pop();
				pthread_mutex_unlock(&amp;writebuffermutex); // unlock write-buffer

				while(bytesSent &lt; toSend+1024-pos ) //send all data
				{
					bytesSent = send(new_socket_fd, pos, toSend+1024-pos,0 );
					if ( bytesSent &lt; 0 ) {  
			       			signal_error(&quot;error sending Data&quot;,0xA009,3);
			       			bytesSent = 1024; //pretend to have sent all data to get out of loop
			       			pthread_mutex_lock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
						shutdown = true;			// close threads properly
						pthread_mutex_unlock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
					}
				}
			}
			else
			{
				pthread_mutex_unlock(&amp;writebuffermutex); // unlock write-buffer
			}
			pthread_mutex_lock(&amp;shutdownmutex);	// lock variable &quot;shutdown&quot;
		}
		pthread_mutex_unlock(&amp;shutdownmutex); // unlock variable &quot;shutdown&quot;
		return 0;
	}

	static void *_readThread(void *This)
	{
		return ((TCPServer*)This)-&gt;readThread(); 
	}

	static void *_writeThread(void *This)
	{
		return ((TCPServer*)This)-&gt;writeThread(); 
	}

	static void *_listenThread(void *This)
	{
		return ((TCPServer*)This)-&gt;doListen();
	}
</code></pre>
<p>Falls jemand etwas findet bin ich sehr dankbar.<br />
natürlich sind auch hinweise auf etwaige andere Fehler wilkommen <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>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858457</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 23:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Fri, 19 Feb 2010 23:34:32 GMT]]></title><description><![CDATA[<p>Ich vermute mal, dass das ganze jetzt wohl im Linux/Unix Forum besser aufgehoben ist.</p>
<p>PS.: Ich weiß das mein Fehler-Handling nicht optimal und eher exotisch ist <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 />
aber wenn jemand einen besseren Vorschlag hat... immer her damit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858460</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Fri, 19 Feb 2010 23:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Sat, 20 Feb 2010 19:42:54 GMT]]></title><description><![CDATA[<p>Hat keiner eine Idee????</p>
<p>Ich sitze jetzt schon seit stunden daran ohne irgendwas ungewöhnliches festzustellen, außer dem Grund für diesen Thread <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>Ich hoffe es kann sich doch noch jemand überwinden sich das anzusehen</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858795</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Sat, 20 Feb 2010 19:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Sat, 20 Feb 2010 19:57:59 GMT]]></title><description><![CDATA[<p>Was machen pipe_error_handler, error_handler und recv_handler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858798</guid><dc:creator><![CDATA[Sodomist]]></dc:creator><pubDate>Sat, 20 Feb 2010 19:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Sat, 20 Feb 2010 20:17:37 GMT]]></title><description><![CDATA[<p>Das:</p>
<pre><code class="language-cpp">void error_handler(string msg,int code, char priority)
{
	switch(priority)
	{
		case 0:
		cout &lt;&lt; &quot;FATAL ERROR: &quot;  &lt;&lt; msg &lt;&lt; &quot; (&quot; &lt;&lt; hex &lt;&lt; code &lt;&lt; dec &lt;&lt; &quot;)&quot; &lt;&lt; endl &lt;&lt; &quot;TERMINATING!&quot; &lt;&lt; endl;
		exit(-1);
		break;
		case 1:
		cout &lt;&lt; &quot;HEAVY ERROR: &quot;  &lt;&lt; msg &lt;&lt; &quot; (&quot; &lt;&lt; hex &lt;&lt; code &lt;&lt; dec &lt;&lt; &quot;)&quot; &lt;&lt; endl &lt;&lt; &quot;restarting might be necessary&quot; &lt;&lt; endl;
		break;
		case 2:
		cout &lt;&lt; &quot;MEDIUM ERROR: &quot; &lt;&lt; msg &lt;&lt; &quot; (&quot; &lt;&lt; hex &lt;&lt; code &lt;&lt; dec &lt;&lt; &quot;)&quot; &lt;&lt; endl;
		break;
		case 3:
		cout &lt;&lt; &quot;MINOR ERROR: &quot;  &lt;&lt; msg &lt;&lt; &quot; (&quot; &lt;&lt; hex &lt;&lt; code &lt;&lt; dec &lt;&lt; &quot;)&quot; &lt;&lt; endl;
		break;
		case 4:
		cout &lt;&lt; &quot;INFORMATION: &quot;  &lt;&lt; msg &lt;&lt; &quot; (&quot; &lt;&lt; hex &lt;&lt; code &lt;&lt; dec &lt;&lt; &quot;)&quot; &lt;&lt; endl;
		break;
	}
}
void recv_handler(const char *msg, int len)
{
	cout &lt;&lt; &quot;received: &quot; &lt;&lt; msg &lt;&lt;&quot; (&quot; &lt;&lt; len &lt;&lt; &quot;)&quot; &lt;&lt; endl;
}

void  pipe_error_handler(int n)
{
	cout &lt;&lt; &quot;server received SIGPIPE&quot; &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1858805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858805</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Sat, 20 Feb 2010 20:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärliches Verhalten?? on Sat, 20 Feb 2010 22:29:41 GMT]]></title><description><![CDATA[<p>ENDLICH <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="😃"
    /> <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="😃"
    /> <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="😃"
    /> <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="😃"
    /> <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="😃"
    /> <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="😃"
    /> <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>
<p>Ich habs gefunden. Schuld waren folgende Zeilen in <code>void *TCPServer::doListen(void)</code> :</p>
<pre><code class="language-cpp">if (close(new_socket_fd) &lt; 0) 
{
	signal_error(&quot;error closing socket&quot;,0xA008,3); an error
}
</code></pre>
<p>Ich weiß nicht warum, aber es funktioniert.<br />
Falls jemand eine Erklärung dafür hat wäre ich dankbar, wenn nicht: auch egal, jetzt funktionierts ja <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>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858896</guid><dc:creator><![CDATA[Unbekannt]]></dc:creator><pubDate>Sat, 20 Feb 2010 22:29:41 GMT</pubDate></item></channel></rss>