Gkar Geschrieben 15. Dezember 2010 Geschrieben 15. Dezember 2010 Hallo zusammen, ich bin gerade dabei mich für eine Hausarbeit in die Socketprogrammierung einzulesen. Das Programm wollte ich mit C/C++ realisieren, deswegen poste ich meine Frage hier und nicht im Netzwerkforum. Als Beispielprogramm hab ich einen simplen Echo-Server gefunden. Den Code kann ich im großen und ganzen verstehen bis auf ein paar Kleinigkeiten. // Send and receive data. int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Client: Sending data."; char recvbuf[32] = ""; bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); while( bytesRecv == SOCKET_ERROR ) { bytesRecv = recv( m_socket, recvbuf, 32, 0 ); if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) { printf( "Connection Closed.\n"); break; } Nun zu meiner Frage, zu dem obenstehenden Codesegment. Mir leuchtet es schon ein, dass dieser Abschnitt zum austausch von Nachrichten gedacht ist, und dies über die beiden Chararrays laufen soll. Was ich allerdings nicht ganz verstehen ist wieso ich int bytesRecv = SOCKET_ERROR; while( bytesRecv == SOCKET_ERROR ) setzen muß? Könnte mir jemand auf die Sprünge helfen, wieso ich zuerst die "bytesRecv" als SOCKET_ERROR setzen muß und dann while-Schleife solange laufen lassen muß, solange wie der "SOCKET_ERROR" besteht? Vielen dank im voraus. Zitieren
Klotzkopp Geschrieben 15. Dezember 2010 Geschrieben 15. Dezember 2010 Ich halte die while-Schleife für Quatsch. Wenn recv einen Fehler meldet, ist es nicht besonders sinnvoll, es noch einmal zu versuchen. Außerdem ist es Unsinn, den Rückgabewert von recv mit WSAECONNRESET zu vergleichen. Das ist 10054, ein gültiger Rückgabewert von recv. WSAGetLastError könnte diesen Wert zurückgeben, aber die Funktion wird hier gar nicht aufgerufen. Woher hast du denn diesen Code? Zitieren
Gkar Geschrieben 16. Dezember 2010 Autor Geschrieben 16. Dezember 2010 Erstmal danke für die Antwort. Das hat mich eben auch ein bischen stutzig gemacht, wieso die while-Schleife mit der Fehlermeldung verglichen werden soll. Aber wie schaut es hiermit aus? Hat dann das seine gültigkeit, bzw. überhaupt einen Sinn? int bytesRecv = SOCKET_ERROR; Den Code hab ich nach längerer Suche über die Codesuche von Google gefunden. Zitieren
Klotzkopp Geschrieben 16. Dezember 2010 Geschrieben 16. Dezember 2010 Aber wie schaut es hiermit aus? Hat dann das seine gültigkeit, bzw. überhaupt einen Sinn?Wenn man die Sinnlosigkeit der Schleifenbedingung außer Acht lässt, ist das so richtig. Ohne diese Anweisung (oder mit einem anderen Wert) würde die Schleife ja gar nicht erst betreten. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.