Dunque, quando creo il pacchetto da inviare inserisco "in testa" un intero che corrisponde alla lunghezza del messaggio, e poi tutto il resto.
Ah perfetto allora. Il buffer di lettura dimensionalo su una grandezza media che sai che normalmente leggi. Se mediamente le tue "read" sono da 1k lo dimensioni da 1k, se sono mediamente da 10 bytes, da 10 bytes.

[EDIT] Se invece stai ricevendo pacchetti grandi Mbytes di dati allora dovresti guardare sul tuo sistema operativo quanto sono grandi i buffer di lettura e basarti su quelli (magari cercando anche su qualche documentazione ufficiale qual'è la grandezza consigliata).