C - socket flushen

Herakles

Profifragensteller
Moin!

Eine Suche hier im Forum und gar im Web ergabe irgendwie nichts wirkich brauchbares, daher meine Frage:

Wie kann ich auf einem Socket in der Programmiersprache C den kompletten Puffer leeren? Also quasi ein flush auf einem Socket durchführen? Eine entsprechende setsockopt-Option habe ich nicht gefunden...

Wie ich darauf komme - ich beginne, mit einem Client auf einem UDP-Socket Daten zu verschicken und starte danach den Server, der die Daten empfängt. Dabei sehe ich, dass in sehr kurzen Zeitabständen erstmal einige Pakete reinkommen, bis sie dann später mit etwa der Paketrate hereinkommen, wie der Client sie produziert. Meine Folgerung ist, dass erst der Puffer des Treibers - oder des Kernels - leergelesen wird und danach kommen dann "neue" Daten in den Userspace nach.

Also - wie flushen?

Danke im Voraus
Herakles
 
Hm, keine Ahnung ob es geht, aber ev. kannst Du setvbuf() verwenden:
Code:
setvbuf(&socket, NULL, _IONBF, BUFSIZ);
Für FILE-Handles geht es; und Sockets unterscheiden sich von denen eigentlich nicht großartig...
 
Prinzipiell ist das doch Wurscht bei UDP. Das gibt keine Garantien über Reihenfolge, Zustellung, Zeit und Puffer. Wenn Du etwas davon zusichern willst, dann musst Du Zusatzmechanismen (Pakete nummerieren, Handshakes oder Zeitstempel) nutzen oder TCP nehmen, das alles auf einmal garantiert.
 
Back
Top