Nun, das Problem ist allgemein bei TCP/IP dass die Daten in Segmenten übertragen werden. Wenn also ein Recv abgesetzt wird, werden die ersten Daten bereits geliefert während die nächsten noch unterwegs sind.
Man hat daher nur die Chance, solange Daten zu lesen bis sie komplett sind.
Und wie stellt man das fest ?
Entweder durch bestimmte Informationen (Länge am Anfang oder Ende-Kennzeichen) oder durch einen Time-Out.