По каким-то причинам при интенсивном приёме множества маленьких пакетов ( < 100 байт) начинает плохо работает QTcpSocket::readAll.
Точнее сказать мы крутимся в цикле внутри функции qint64 QAbstractSocket::readData(char *data, qint64 maxSize) и никогда из него не выходим. Вот этот конкретный кусок кода:
while (readSoFar < bytesToRead) {
const char *ptr = d->readBuffer.readPointer();
int bytesToReadFromThisBlock = qMin(int(bytesToRead - readSoFar),
d->readBuffer.nextDataBlockSize());
memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
readSoFar += bytesToReadFromThisBlock;
d->readBuffer.free(bytesToReadFromThisBlock);
}
Причем что интересно, вначале (секунд 5-10) всё нормально, а потом происходит вышеописанное. Что за дьявольщина? Проверял под 4.3.3 - та же херня, что навевает мысли о том что я где-то не правильно использую QTcpSocket. Хотя я ничего кроме readAll по сигналу readyRead не делаю.. Да, вот ещё, я пробовал асинхронный сокет в гуёвом потоке/рабочем потоке - из изменений только логичное не-зависание гуя, в остальном всё так же. Что это может быть и что ещё можно проверить?