Y la razón es (explicación SUPER-simplificada, OJO!):
1) El sitema operativo mantiene buffers internos y no 'te da' datos hasta que no los llena. (más o menos)
2) No debes asumir que tu proceso es el único en el sistema. Cuando haces recv entras en una cola de bloqueados, cuando el SO recibe paquetes de la red te saca de esa cola y te mete en la de 'listos'. Desde que estás 'listo' hasta que REALMENTE te ejecutas, pueden llegar MUCHÍSIMOS paquetes de red (y más con las Gigabit y 10Gigabit de hoy en día).
Hay más casos, pero eso resume los mayores (o eso creo)
- ferdy