Mi spiace che avrei dovuto risponderti in modo più pertinente alle QT, mi è un po' sfuggito il contesto.
Vedo ora che puoi usare un bytesAvailable() prima ancora di fare socket->read().
Quindi forse dovresti fare un loop dentro la tua "void read" fintanto che non hai consumato quei bytes disponibili.
Ciao.