C++ (Qt) while(tcpSocket->state() == QAbstractSocket::ConnectedState) { if (!tcpSocket.waitForReadyRead(timeout)) return; block = tcpSocket.readAll(); ... } // while
... QByteArray data; bool ret = sock->waitForReadyRead(таймаут ожидания прихода пакета данных в сокет); if (ret) { do { quint64 bav = sock->bytesAvailable(); if (bav > 0) data.append(read(bav)); else return ошибка; } while (sock->waitForReadyRead(таймаут ожидания следующего байта в сокет);) //например около 5-50 мс, в зависимости от твоей идеологии приложения return data; } else return таймаут...
C++ (Qt) if (d->isSequential() || size() == 0) { // Read it in chunks. Use bytesAvailable() as an unreliable hint for // sequential devices, but try to read 4K as a minimum. int chunkSize = qMax(qint64(4096), bytesAvailable()); qint64 totalRead = 0; forever { tmp.resize(tmp.size() + chunkSize); qint64 readBytes = read(tmp.data() + totalRead, chunkSize); tmp.chop(chunkSize - (readBytes < 0 ? 0 : readBytes)); if (readBytes <= 0) return tmp; totalRead += readBytes; chunkSize = qMax(qint64(4096), bytesAvailable()); }
C++ (Qt)qint64 QIODevice::bytesAvailable() const{ Q_D(const QIODevice); if (!d->isSequential()) return qMax(size() - d->pos, qint64(0)); return d->buffer.size();}