<?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[Webserver programmieren... Problem mit recv()]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich programmiere zur Zeit einen Webserver, jedoch habe ich ein kleines Problem!<br />
Und zwar würde ich es gerne so machen, dass der Webserver immer die gesamte Anfrage einliest und erst dann weiter geht.</p>
<pre><code class="language-cpp">while(rc != SOCKET_ERROR)
  {
	  printf(&quot;--&gt; %i\n&quot;, rc);
	  rc = recv(connectedSocket, buf, sizeof(buf), 0);
	  if(rc == 0)
	  {
		  printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
		  break;
	  }
	  if(rc == SOCKET_ERROR)
	  {
		  printf(&quot;Fehler: recv, fehler code: %d\n&quot;, WSAGetLastError());
		  break;
	  }
	  buf[rc] = '\0';
	  printf(&quot;Client sendet: %s\n&quot;, buf);
	  printf(&quot;!&quot;);
  }
</code></pre>
<p>Mit diesem Code bleibt der Webserver jedoch bei recv() stehen und ich komme nicht aus der Schleife um die Anfrage zu verarbeiten.</p>
<p>Wie wird das richtig umgesetzt? Vielen Dank im Voraus!</p>
<p>HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192514/webserver-programmieren-problem-mit-recv</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 17:28:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192514.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Sep 2007 12:53:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 12:53:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich programmiere zur Zeit einen Webserver, jedoch habe ich ein kleines Problem!<br />
Und zwar würde ich es gerne so machen, dass der Webserver immer die gesamte Anfrage einliest und erst dann weiter geht.</p>
<pre><code class="language-cpp">while(rc != SOCKET_ERROR)
  {
	  printf(&quot;--&gt; %i\n&quot;, rc);
	  rc = recv(connectedSocket, buf, sizeof(buf), 0);
	  if(rc == 0)
	  {
		  printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
		  break;
	  }
	  if(rc == SOCKET_ERROR)
	  {
		  printf(&quot;Fehler: recv, fehler code: %d\n&quot;, WSAGetLastError());
		  break;
	  }
	  buf[rc] = '\0';
	  printf(&quot;Client sendet: %s\n&quot;, buf);
	  printf(&quot;!&quot;);
  }
</code></pre>
<p>Mit diesem Code bleibt der Webserver jedoch bei recv() stehen und ich komme nicht aus der Schleife um die Anfrage zu verarbeiten.</p>
<p>Wie wird das richtig umgesetzt? Vielen Dank im Voraus!</p>
<p>HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365852</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sat, 15 Sep 2007 12:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 13:22:56 GMT]]></title><description><![CDATA[<p>Wahrscheinlich hast du blocking sockets. Forderst du, wie hier, mit recv eine bestimmte Menge an Daten an, kehrt er nicht wieder, bis alle Daten da sind.</p>
<p>Es kommen also wahrscheinlich nicht so viele an, wie du möchtest <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="😉"
    /> Ich empfehle dir den guten Artikel hier im Magazin, nonblocking Sockets und die können bei recv auch einen Fehler mit WSAGetLastError()==WSAE_WOULDBLOCK zurückgegeben, was bedeutet, dass nur grad keine Daten zum lesen da sind, ist dann also kein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365867</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 15 Sep 2007 13:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 14:00:12 GMT]]></title><description><![CDATA[<p>man kann für blocking recv einen time-out einstellen mit setsockopt und SO_RCVTIMEO. weiss aber nicht mehr ob das klappt.<br />
<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/1365889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365889</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Sat, 15 Sep 2007 14:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 14:48:27 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365921</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 15 Sep 2007 14:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 14:52:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Forderst du, wie hier, mit recv eine bestimmte Menge an Daten an, kehrt er nicht wieder, bis alle Daten da sind.</p>
</blockquote>
<p>Falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365923</guid><dc:creator><![CDATA[Sonnenbad]]></dc:creator><pubDate>Sat, 15 Sep 2007 14:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 15:21:15 GMT]]></title><description><![CDATA[<p>Sonnenbad schrieb:</p>
<blockquote>
<blockquote>
<p>Forderst du, wie hier, mit recv eine bestimmte Menge an Daten an, kehrt er nicht wieder, bis alle Daten da sind.</p>
</blockquote>
<p>Falsch.</p>
</blockquote>
<p>Ohne Begründung werde ich das wohl kaum akzeptieren..</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>If no incoming data is available at the socket, the recv call blocks and waits for data to arrive. When the socket is nonblocking, a value of SOCKET_ERROR is returned with the error value set to WSAEWOULDBLOCK.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1365936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365936</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 15 Sep 2007 15:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 15:38:37 GMT]]></title><description><![CDATA[<p>Da steht &quot;waits for data to arrive&quot; und nicht &quot;waits for data to arrive&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365954</guid><dc:creator><![CDATA[Sonnenbad]]></dc:creator><pubDate>Sat, 15 Sep 2007 15:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 15:39:29 GMT]]></title><description><![CDATA[<p>Da steht &quot;waits for data to arrive&quot; und nicht &quot;waits for all data to arrive&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365955</guid><dc:creator><![CDATA[Sonnenbad]]></dc:creator><pubDate>Sat, 15 Sep 2007 15:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 15:40:55 GMT]]></title><description><![CDATA[<blockquote>
<p>For connection-oriented sockets (type SOCK_STREAM for example), calling recv will return as much data as is currently available—up to the size of the buffer specified.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1365956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365956</guid><dc:creator><![CDATA[halllo]]></dc:creator><pubDate>Sat, 15 Sep 2007 15:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sat, 15 Sep 2007 16:08:22 GMT]]></title><description><![CDATA[<p>jo, wenn recv() blockiert ist schlicht und ergreifend gerade nix da <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=";D"
      alt="😉"
    /></p>
<p>Im Prinzip musst du recv() solange immer wieder aufrufen und die Daten in einen Buffer pappen bis zwei Zeilenumbrüche hintereinander kommen, dann ist der HTTP-Header vorbei. Bei POST z.B. könnten dann halt noch Daten nach dem HTTP-Header kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365967</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sat, 15 Sep 2007 16:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sun, 16 Sep 2007 16:47:58 GMT]]></title><description><![CDATA[<p>Danke! Ich habe dieses Problem gelöst <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>
<p>Ich habe aber noch eine Frage, denn ich würde gerne Umgebungsvariablen für meinen Webserver erstellen: GATEWAY_INTERFACE, SCRIPT_NAME, REMOTE_ADDR, usw...</p>
<p>Wie richte ich diese Umgebungsvariablen ein? Das würde mir wirklich <strong>sehr</strong> weiterhelfen <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>
<p>Abfragen kann ich diese dann so weit ich das feststellen konnte mit <strong>getenv()</strong> <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>
<p>Vielen Dank im Voraus,<br />
HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366471</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 16 Sep 2007 16:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sun, 16 Sep 2007 17:04:25 GMT]]></title><description><![CDATA[<p>&quot;für&quot; deinen Webserver? - Erzeugt der Webserver nicht normalerweise diese Variablen für CGI-Programme?<br />
An CGI-Programme kannst du die direkt wenn du das CGI-Programm mittels CreateProcess() startest übergeben und über die LpStartupInfo auch direkt die Ausgabe umleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366475</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 16 Sep 2007 17:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Sun, 16 Sep 2007 17:58:56 GMT]]></title><description><![CDATA[<p>Hallo geeky,</p>
<p>vielen Dank für deine Hilfe <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 />
Ich dachte ich setze einfach die Umgebungsvariablen und &quot;vererbe&quot; diese dann an das CGI Programm <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>
<p>Ich habe jedoch ein neues Problem:<br />
Ich möchte jetzt ein Programm starten(CreateProcess) und eine Zeile in die Eingabe des Programms schreiben und danach die Ausgabe des Programms auslesen. Jedoch verzweifel ich daran gerade <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="😞"
    /> Ich habe schon hier im Forum gesucht, jedoch waren die meisten der Frage unbeantwortet.</p>
<p>Hat hier also jemand ein Beispiel dafür? Ich weiß nicht, ob man unbedingt mit CreatePipe arbeiten muss? Vielleicht gehts auch ganz anders <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="🙂"
    /> Wäre über Hilfe wirklich <strong>sehr</strong> dankbar!!!</p>
<pre><code class="language-cpp">#define BUFSIZE 1024
				 STARTUPINFO	si;
				PROCESS_INFORMATION	pi;
				SECURITY_ATTRIBUTES sa;
				HANDLE hPipeRead,hPipeWrite;
				char cPipeResult[BUFSIZE];
				DWORD dwBytes;
				 //
				// Erstellen der Pipe
				sa.nLength=sizeof(sa);
				sa.bInheritHandle=TRUE;
				sa.lpSecurityDescriptor=NULL;
				CreatePipe(&amp;hPipeRead,&amp;hPipeWrite, &amp;sa, 0);

				si.cb=sizeof(STARTUPINFO);
				si.lpReserved=NULL;
				si.lpDesktop=NULL;
				si.lpTitle=NULL;
				si.dwX=0;
				si.dwY=0;
				si.dwXSize=640;
				si.dwYSize=400;
				si.dwXCountChars=0;
				si.dwYCountChars=0;
				si.dwFillAttribute=FOREGROUND_BLUE;
				si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
				si.wShowWindow=SW_HIDE;
				si.cbReserved2=0;
				si.lpReserved2=NULL;
				si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
				si.hStdOutput=hPipeWrite;
				si.hStdError=GetStdHandle(STD_ERROR_HANDLE);
				//STARTUPINFO si;
				 //PROCESS_INFORMATION pi;
			 ZeroMemory( &amp;si, sizeof(si) );
				si.cb = sizeof(si);
				ZeroMemory( &amp;pi, sizeof(pi) );

				if( !CreateProcess( NULL,   // No module name (use command line)
					&quot;test.cgi&quot;,        // Command line
					NULL,           // Process handle not inheritable
					NULL,           // Thread handle not inheritable
					true,          // Set handle inheritance to FALSE
					0,              // No creation flags
					NULL,           // Use parent's environment block
					NULL,           // Use parent's starting directory 
					&amp;si,            // Pointer to STARTUPINFO structure
					&amp;pi )           // Pointer to PROCESS_INFORMATION structure
				) 
				{
					printf( &quot;CreateProcess failed (%d)\n&quot;, GetLastError() );
				}

				memset(cPipeResult,0,BUFSIZE);
				//WriteFile( // ? 
				ReadFile(hPipeRead,cPipeResult,sizeof(cPipeResult),&amp;dwBytes,NULL);

				CloseHandle( pi.hProcess );
				CloseHandle( pi.hThread );
/*
Nebenbei scheint irgendeine Funktion das Programm zu &quot;blocken&quot;... 
*/
</code></pre>
<p>Vielen Dank im Voraus,<br />
HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366500</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 16 Sep 2007 17:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Tue, 18 Sep 2007 19:39:32 GMT]]></title><description><![CDATA[<p>push...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368024</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Tue, 18 Sep 2007 19:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Tue, 18 Sep 2007 19:48:29 GMT]]></title><description><![CDATA[<p>Ich kenn mich mit Pipes leider nicht aus <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=";D"
      alt="😉"
    /><br />
Macht das nicht evtl. Sinn erst auf Prozessende zu warten (WaitForSingleObject) und erst dann aus der Pipe zu lesen?<br />
Wo blockiert er denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368029</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 18 Sep 2007 19:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Tue, 18 Sep 2007 20:29:58 GMT]]></title><description><![CDATA[<p>Es ist nicht gerade ratsam das Redirect auf unterschieldiche Streams laufen zu lassen (also den STD und ERR-Stream).<br />
Das führt meistens zu Problemen...<br />
Wenn Du STD und ERR getrennt haben, willst, kommst Du um einem eigenen Thread nicht drum rum, da Du *beide* Streams lesen musst sonst blokiert Deine Ausgabe!</p>
<p>Und damit Du gleich siehst, dass das was Du gemacht hast etwas zu einfach gestrickt ist:<br />
<a href="http://support.microsoft.com/kb/190351/en-us" rel="nofollow">http://support.microsoft.com/kb/190351/en-us</a></p>
<p>Fazit: Unter 300 Zeilen kommst Du kaum aus <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/1368055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368055</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 18 Sep 2007 20:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Wed, 19 Sep 2007 15:27:30 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten <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>
<p>Ich habe noch sehr viel rumprobiert und bin schon weiter gekommen, denn das CGI-Programm wird korrekt ausgeführt. Ich dachte also ich hatte es endlich geschafft und drückte begeistert immer wieder auf die Aktualiseren Taste(F5) meines Browser um zu überprüfen, ob die Ausgabe sich auch nicht (durch Programmierfehler) veränderte. Die Ausgabe veränderte sich auch nicht, aber nach einigen malen blieb alles stehen(Browser lädt sich tot). Mein Programm stand still... Ein Reproduzieren des Fehlers war ohne Probleme möglich.<br />
Ich war und bin noch immer ziemlich enttäuscht <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>Vielleicht brauche ich gar keine Pipe? Kann doch alles nicht soooooo schwer sein...</p>
<p>Aktueller Code:</p>
<pre><code class="language-cpp">void execCGI(const char *file, const char *para, SOCKET sock) {
	printf(&quot;execCGI\n\n&quot;);
	HANDLE readHandle;
    HANDLE writeHandle;
	DWORD dwWaitResult = WAIT_TIMEOUT, dwBytesRead, dwBytesWrote, dwSizeLow, dwSizeHigh, dwError;
    SECURITY_ATTRIBUTES sa;
    PROCESS_INFORMATION pi;
    STARTUPINFO si;

    ZeroMemory(&amp;sa,sizeof(SECURITY_ATTRIBUTES));
    ZeroMemory(&amp;pi,sizeof(PROCESS_INFORMATION));
    ZeroMemory(&amp;si,sizeof(STARTUPINFO));

    sa.bInheritHandle=true;
    sa.lpSecurityDescriptor=NULL;
    sa.nLength=sizeof(SECURITY_ATTRIBUTES);
    si.cb=sizeof(STARTUPINFO);
    si.dwFlags=STARTF_USESHOWWINDOW;
    si.wShowWindow=SW_HIDE;

    if (!CreatePipe(&amp;readHandle,&amp;writeHandle,&amp;sa,NULL))
    {
        OutputDebugString(&quot;cmd: CreatePipe failed!\n&quot;);
    }

	SetStdHandle(STD_OUTPUT_HANDLE,writeHandle);
	SetStdHandle(STD_INPUT_HANDLE,readHandle);

    if (!CreateProcess(NULL,const_cast&lt;char *&gt;(file),NULL,NULL,TRUE,0,NULL,NULL,&amp;si,&amp;pi))
    {
        OutputDebugString(&quot;cmd: CreateProcess failed!\n&quot;);
    }

	char temp[256];
	sprintf(temp, &quot;%s\n&quot;, para); // Parameter für das CGI

	WriteFile(writeHandle, temp,  strlen(temp), &amp;dwBytesWrote, 0);

	const int MAX_LINE_LENGTH = 1024;
	char cReadLine[MAX_LINE_LENGTH];

	char header[256];
	sprintf(header, &quot;HTTP/1.1 200 OK\r\nServer: HTTP-Test\r\n&quot;); // Header für den Browser
	send(sock, header, (int) strlen(header), 0);

	while(dwWaitResult != WAIT_OBJECT_0) {
		printf(&quot;1 |-&quot;);
		dwWaitResult = WaitForSingleObject(pi.hProcess, 10); // Eventuell blockt es hier!
		printf(&quot;-|\n&quot;);

		while(dwSizeLow = GetFileSize(readHandle, &amp;dwSizeHigh)) {
			printf(&quot;2 |-&quot;);
			ZeroMemory(cReadLine, MAX_LINE_LENGTH);
			printf(&quot;-|\n&quot;);

			printf(&quot;3 |-&quot;);
			if(ReadFile(readHandle, cReadLine, MAX_LINE_LENGTH - 1, &amp;dwBytesRead, NULL)) { // Eventuell blockt es hier!
				if(dwBytesRead) {
					send(sock, cReadLine, (int) strlen(cReadLine), 0);
				}
			} else {
				dwError = GetLastError();
			}
			printf(&quot;-|\n&quot;);
		}
	}

	Sleep(100);

    if (!CloseHandle(readHandle))
    {
        OutputDebugString(&quot;cmd: CloseHandle(readHandle) failed!\n&quot;);
    }
    if (!CloseHandle(writeHandle))
    {
        OutputDebugString(&quot;cmd: CloseHandle(writeHandle) failed!\n&quot;);
    }
}
</code></pre>
<p>Vielen dank im Voraus!</p>
<p>HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368645</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Wed, 19 Sep 2007 15:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Wed, 19 Sep 2007 16:51:51 GMT]]></title><description><![CDATA[<p>Du hast den Error-Handle vergessen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368712</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 19 Sep 2007 16:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Wed, 19 Sep 2007 17:24:55 GMT]]></title><description><![CDATA[<p>Hast du einen Vorschlag, wie ich das am Besten einbaue? Würde mir sehr helfen!</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368739</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Wed, 19 Sep 2007 17:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Webserver programmieren... Problem mit recv() on Wed, 19 Sep 2007 19:27:33 GMT]]></title><description><![CDATA[<p>Siehe KB-Artikel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368814</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 19 Sep 2007 19:27:33 GMT</pubDate></item></channel></rss>