Zitat:
Erstmal könnte man sofort lesen und bei einem bekannten/erkannten "Ende" sofort aufhören
Dazu müsste man die Content-Length aus dem HTTP Header auswerten, richtig? Oder wie sonst würde man ein Ende erkennen? Problem: der HTTP-Header selbst ist Bestandteil dessen, was die Methode ReceiveBuffer empfängt.
Man kann sich bei HTTP nicht darauf verlassen, dass es immer einen Content-Length-Header gibt. Im allgemeinen ist das Ende dann, wenn die
TCP-Verbindung geschlossen wird (außer bei Persistent Verbindungen ab HTTP/1.1, aber darum kümmern wir uns hier nicht). Dass die Verbindung geschlossen wurde, erkennst du daran, dass
recv() die Länge 0 zurückgibt.
Ich weiß nicht, wozu das Sleep gut sein soll. Standardmäßig blockieren die Socket-Funktionen sowieso schon solange, bis Daten empfangen wurden. Außer sie wurden mit SetSockOpt in den nonblocking-Modus versetzt. Aber in dem Fall wäre das hier eine sehr instabile Frickelei.