john: Linux , C++ , TCP-Socket

Beitrag lesen

Hi,

ich habe ein Problem beim coden eines TCP Servers:

  
// Beispiel 1:  
char echo_buffer[1024] = {""};  
if((recv_size = recv(client_socket, echo_buffer, 1024,0)) < 0) { // error  
}  
echo_buffer[recv_size] = '\0';  
printf("%s", echo_buffer); // funktioniert  
  
// Beispiel 2:  
// Funktioniert dagegen nicht:  
string result = "";  
while((recv_size = recv(client_socket, echo_buffer, 1024,0)) > 0) {  
 echo_buffer[recv_size] = '\0';  
 result += echo_buffer;  
}  
printf("%s", result.c_str());  

Das Erste Beispiel Funktioniert, Aber nur wenn die Anfrage nicht länger als 1024 Zeichen ist.
Das ist das Problem.
Ich habe ein Protokoll das keine feste länge von Nachrichten vorschreibt. Man kann nicht vorhersagen ob die nächste Nachricht 3 Zeichen hat oder 100302. Natürlich ist das nicht immer so krass aber in einigen mehr oder weniger konstruierten Fällen kann dies der Fall sein.

Die 2. Version funktioniert (sehr bedingt). Wenn der Client die Verbindung trennt nachdem er seine Nachricht übermittelt macht der Server weiter und gibt result aus.
Meine Erklärung ist das recv blockt. Sie holt solange die Zeichen ab bis keine mehr kommen und wartet nun das welche kommen (blocking). Es kommen aber keine. An dieser Stelle sollte die while-Schleife abbrechen da die Nachricht ja zu Ende ist.

Welche Lösungsvorschläge habt ihr mir anzubieten?