So weit ich weiß, kann es durchaus passieren, dass recv Dir weniger Daten liefert als eigentlich verfügbar sein könnten. Beim zweiten Aufruf würde es dann die restlichen Daten liefern. Der Grund kann sein, dass auf der anderen Seite vom Socket zu langsam geschrieben wird, oder dass der Netzwerkpuffer zu klein ist.
Daher würde ich empfehlen, eine Schleife um recv herum zu basteln. Nach jedem recv-Aufruf entsprechend alle möglichen Fehler abfragen. Beispiele für solche Schleifen findest Du bestimmt überall.
Übrigens: Wie genau sich recv verhält, hängt nicht zuletzt auch davon ab, was das für Sockets sind. TCP? UDP? Lokal? Betriebssystem? Mondphase? Davon hängt das alles ab.