Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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?

Geschrieben

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.

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...