Non c'è corrispondenza diretta tra il numero di dati inviati e quelli ricevuti.

Ovvero, se invii 8192, non è detto che ne ottieni subito 8192 in ricezione ma ne potresti ottenere 4000, dopo un po' 3000, intanto ne invii altri 8192 e ne ricevi 2000 e così via ... l'unica cosa di cui sei certo è l'ordine di trasmissione/ricezione.

In teoria, potresti inviare con una sola send tutto il milione di char ...

Sul fatto che ne ricevi meno di quelli inviati, non è facile dire il perché se non gestisci gli errori ...