Socket Send() - Sleep nötig



  • Hallo Leute,

    ich verschicke über die Funktion Send einige Daten.

    int sendresult  = send( socketsend, tele , 42, 0 );
     if (sendresult == SOCKET_ERROR) {
     std::cout << "send failed with error: " << WSAGetLastError() << std::endl;
     };
    

    Darauf hin folgt ein closesocket();

    Die Daten werden erst RICHTIG gesendet, wenn ich zwischen send() und closesocket() eine Schleife oder Sleepfunktion einbaue.

    Das heißt meines Erachtens, dass die Send Funktion Daten verschickt, jedoch währenddessen schon zum nächsten Abschnitt springt.

    Gibt es eine Möglichkeit zu Überprüfen, ob die Daten vollständig gesendet wurden?

    Mit freundlichen Grüßen

    Zuckerlie



  • Benutze shutdown(..) vor dem closesocket(..).



  • Das habe ich vergessen zu erwähnen, dass ich shutdown nutze. Ändern tut es dennoch nichts.



  • hi,

    zuckerlie schrieb:

    Gibt es eine Möglichkeit zu Überprüfen, ob die Daten vollständig gesendet wurden?

    die funktion send gibt die anzahl der bytes, die verschickt wurden, zurück
    nun, du kannst den wert der variable sendresult mit der größe der daten, die du schicken möchtest, vergleichen. Ist sendresult kleiner so wurden die daten nicht vollständig gesendet.



  • Du nutzt blockierende Sockets und da wird nicht alles gesendet? Poste mal bitte mehr Code, und sag uns was du da sendest und wie du es empfängst, das interessiert mich.



  • zuckerlie schrieb:

    Das habe ich vergessen zu erwähnen, dass ich shutdown nutze. Ändern tut es dennoch nichts.

    graceful shutdown/closesocket oder nicht?

    Edit:
    Hab das auch schon gehabt, daß manche Seiten auch auf ein shutdown(socket, SD_SEND) mit einem error oder Abbruch reagieren.

    Das liegt wohl eher beim Empfänger als beim Sender.


Anmelden zum Antworten