Sem saber o suficiente sobre a implementação, só posso supor que o seu processo na extremidade de escuta não faça um loop para recv(2) do soquete, mas apenas leia uma vez. O fato de você obter tudo de uma vez no Ubuntu e não no OS X provavelmente tem a ver com a implementação da pilha TCP nos dois sistemas, mas não é algo que deva importar; em vez disso, o código na extremidade de recepção deve pesquisar o soquete e ler os dados conforme disponíveis.
Confira as chamadas socket(2) e recv(2) , e talvez poste algum código, se achar que isso ajudaria.