Sockets und variable Datenpakete (msg_peek)



  • eins voraus, ich hab nach meinem thema gesucht es aber irgendwie nicht mehr gefunden, deshalb ein neues thema:

    ich hatte ja mal angefangen mit sockets und paketartiger übertragung rumzubasteln.

    jetzt iss mir der kragen geplatzt vor lauter umständen und ich habs einfach wieder auf die übermittlung von längeninformation + befehlsnummer + daten reduziert .... in meinem programm verwende ich msg_peek um auf daten zu warten wenn welche für ein komplettes paket fehlen.
    meine frage an der stelle nochmal ich verwende winsock2.h für winsock1.1 weis ich das es probleme gibt aber mit winsock2 ?

    ich frage hier nach erfahrungswerten, eh ich fehlerhaften code schreibe, im netz hab ich nichts zu derartigen problemen unter version 2 gefunden.



  • Ich hab grad keine Quelle dafür, ich meine aber gehört zu haben, dass man msg_peek nicht (mehr) benutzen soll 😉 Probiers mal mit wiederholtem recv mit der Anzahl an fehlenden Bytes, vielleicht liegts daran.



  • Ceos,

    Don't try to teach your protocol to the kernel.
    Just try to get as much data from the kernel as quickly as you can, then parse it as the kernel gives it to you.



  • ja ich weis ich weis .... ich wollt aber ein unnötiges umkopieren der daten vermeiden :p

    char buff[100];
    
    struct thead {
       char size;
       char ID;
    } head;
    
    ...
      int tot = 0;
      tot = recv(sock, head, sizeof(head), 0);
      while (tot < sizeof(head)) {
        tot += recv(sock, head+tot, sizeof(head)-tot, 0);
      }
      int len = head.size;
      tot = 0;
      tot = recv(sock, buff, len, 0);
      while (tot < len) {
        tot += recv(sock, buff+tot, len-tot, 0);
      }
    ...
    

    EDIT : so hab ichs jetzt gelöst, da brauch cih auch nix umkopieren kein msg_peek und ich hab keinen pufferüberlauf, weil ich das recv immer auf das nurnoch notwendige begrenze _

    last EDIT: einziges Problem das bleibt ist, wenn meine pakete korrupiert werden (oder ein fehler bei der berechnung der länge auftrit) gehts natürlich wieder nicht, aber das iss ne andere geschichte :p


Anmelden zum Antworten