<?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[c++ socket server ohne zusätzlichen prozess verwalten.]]></title><description><![CDATA[<p>habe mir eine kleine c++ socket library geschrieben um schnell nen server zu erstellen, der unter linux und windows laufen kann.<br />
der ausschnitt zeigt, dass die clients über select ausgewählt werden. HandleCLient() ist eine virtuelle funktion.<br />
Mein problem ist jetzt, dass der server noch über konsoleneingabe verwaltet werden müsste.<br />
ich möchte jedoch keinen thread dafür erstellen, da der code prinzipiell leicht portierbar sein sollte.<br />
nun ist die frage, ob das evtl auch ohne threads evtl mit select gehen könnte. mein gedanke wäre die tastatur als spezielles socket zu benutzen.</p>
<pre><code class="language-cpp">void Server::ServerLoop() {
	int iGreatestFD;
	Socket SocketClient;

	while(true) {
		FD_ZERO(&amp;m_ClientFDSet);
		iGreatestFD = ServerCreateFDSet();

		FD_SET(m_SocketServer, &amp;m_ClientFDSet);
		if(m_SocketServer &gt; iGreatestFD) {
			iGreatestFD = m_SocketServer;
		}

		select(iGreatestFD + 1, &amp;m_ClientFDSet, NULL, NULL, NULL);

		if(FD_ISSET(m_SocketServer, &amp;m_ClientFDSet)) {
			SocketClient = m_SocketServer.SocketAccepted();
			ServerAddClient((int)SocketClient, SocketClient);
		}
		else {
			for(std::list&lt;ClientData&gt;::iterator it = m_lClients.begin(); it != m_lClients.end(); it++) {
				if(it-&gt;m_iFD == GetSendingClient()) {
					SocketClient = it-&gt;m_SocketClient;
				}
			}

			HandleClient(SocketClient);
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/273275/c-socket-server-ohne-zusätzlichen-prozess-verwalten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 07:45:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273275.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Sep 2010 13:41:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c++ socket server ohne zusätzlichen prozess verwalten. on Fri, 03 Sep 2010 13:41:43 GMT]]></title><description><![CDATA[<p>habe mir eine kleine c++ socket library geschrieben um schnell nen server zu erstellen, der unter linux und windows laufen kann.<br />
der ausschnitt zeigt, dass die clients über select ausgewählt werden. HandleCLient() ist eine virtuelle funktion.<br />
Mein problem ist jetzt, dass der server noch über konsoleneingabe verwaltet werden müsste.<br />
ich möchte jedoch keinen thread dafür erstellen, da der code prinzipiell leicht portierbar sein sollte.<br />
nun ist die frage, ob das evtl auch ohne threads evtl mit select gehen könnte. mein gedanke wäre die tastatur als spezielles socket zu benutzen.</p>
<pre><code class="language-cpp">void Server::ServerLoop() {
	int iGreatestFD;
	Socket SocketClient;

	while(true) {
		FD_ZERO(&amp;m_ClientFDSet);
		iGreatestFD = ServerCreateFDSet();

		FD_SET(m_SocketServer, &amp;m_ClientFDSet);
		if(m_SocketServer &gt; iGreatestFD) {
			iGreatestFD = m_SocketServer;
		}

		select(iGreatestFD + 1, &amp;m_ClientFDSet, NULL, NULL, NULL);

		if(FD_ISSET(m_SocketServer, &amp;m_ClientFDSet)) {
			SocketClient = m_SocketServer.SocketAccepted();
			ServerAddClient((int)SocketClient, SocketClient);
		}
		else {
			for(std::list&lt;ClientData&gt;::iterator it = m_lClients.begin(); it != m_lClients.end(); it++) {
				if(it-&gt;m_iFD == GetSendingClient()) {
					SocketClient = it-&gt;m_SocketClient;
				}
			}

			HandleClient(SocketClient);
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1947833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947833</guid><dc:creator><![CDATA[dgrat]]></dc:creator><pubDate>Fri, 03 Sep 2010 13:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to c++ socket server ohne zusätzlichen prozess verwalten. on Fri, 03 Sep 2010 17:27:09 GMT]]></title><description><![CDATA[<p>naja ich habs selber gemacht, falls einer mal in die verlegenheit kommen sollte:</p>
<pre><code class="language-cpp">void Server::ServerLoop() {
	int iGreatestFD;
	Socket SocketClient;

	ServerAddClient(STDIN_FILENO);

	while(true) {
		FD_ZERO(&amp;m_ClientFDSet);
		iGreatestFD = ServerCreateFDSet();

		FD_SET(m_SocketServer, &amp;m_ClientFDSet);
		if(m_SocketServer &gt; iGreatestFD) {
			iGreatestFD = m_SocketServer;
		}

		select(iGreatestFD + 1, &amp;m_ClientFDSet, NULL, NULL, NULL);

		/*
		 * neue clients
		 */
		if(FD_ISSET(m_SocketServer, &amp;m_ClientFDSet)) {
			SocketClient = m_SocketServer.SocketAccepted();
			ServerAddClient(SocketClient);
		}
		/*
		 * Tastatur
		 */
		else if(FD_ISSET(STDIN_FILENO, &amp;m_ClientFDSet)) {
			HandleServer();
		}
		/*
		 * eingehende nachrichten
		 */
		else {
			for(std::list&lt;ClientData&gt;::iterator it = m_lClients.begin(); it != m_lClients.end(); it++) {
				if(it-&gt;m_SocketClient == GetSendingClient()) {
					SocketClient = it-&gt;m_SocketClient;
				}
			}
			HandleClient(SocketClient);
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1947915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947915</guid><dc:creator><![CDATA[dgrat]]></dc:creator><pubDate>Fri, 03 Sep 2010 17:27:09 GMT</pubDate></item></channel></rss>