TCP Puffer flushen



  • Hallo,

    ich habe ein Programm, dass mir einen Stream ausliest, den mir ein Messgerät über eine TCP Socket Verbindung zusendet. Bei klick auf Start wird dem Gerät gesagt, dass es mit streamen beginnen soll und mein C++ code beginnt in einer Schleife die Packete mit recv() auszulesen. Klick auf Stop beendet das streamen und das auslesen. Bei erneutem klick auf Start erhalte ich jedoch Packete, die scheinbar noch von der letzten "Session" stammen, da der PackageCounter, der die gesendeten Packete mitzählt erst nach ca. 100 Paketen zurück auf 0 gesetzt wird. Das heißt scheinbar, dass ich mit jedem neuen Messstart mir alte Messwerte abhole.
    Gibt es dafür vielleicht eine Möglichkeit den Puffer bei klick auf Stop zu flushen, bzw. komplett auszulesen? Ich habe schon versucht nach dem beenden des Streams den Puffer noch so lange auszulesen, bis er leer ist. Nur weiß ich eben nicht, wann er leer ist und so lass ich ihn auslesen, bis irgendwann nix mehr kommt und dann bleibt er hängen, weil recv() eben erwartet, dass ein weiteres 48byte Packet kommt. Kann man irgendwie herausfinden, wieviel noch drin steht um den Rest auszulesen, bzw. eben den ganzen restlichen Puffer zu flushen.. Oder gibt es die Möglichkeit einen Timeoput für das recv() festzulegen, sodass er nach 500ms von allein abbricht!?

    Den Socket zu schließen und neu zu Verbinden ist sicherlich eine Möglichkeit, aber die wollte ich wenn möglich umgehen.

    Ich hoffe es weiß einer Rat!?
    Danke für jede Hilfe!! 🙂



  • mit select kannst du prüfen ob ein anschließendes recv blockiert oder nicht.

    Gruß Frank



  • Dankeschön. Hat funktioniert..
    Hatte von dem Select schon gehört, wusste aber nicht, dass es eine Lösung für mein Problem sein könnte 😉
    Grüße


Anmelden zum Antworten