Отправляю с сервера на клиента поток данных (из файла)
qint64 bufSize = 128*1024;
int timeout = 10;
CLogger logger();
QFile file("somefile.bin");
file.open(QIODevice::ReadOnly);
while(!file.atEnd())
{
if (needChangeSpeed) // если необходимо изменить скорость
{
delayValue = timeout; // изменение таймаута
bufSize = transferSpeedBuf; // изменение размера пакета
needChangeSpeed = false;
}
outBuf.clear();
out.device()->seek(0);
QByteArray fileData = file.read(number);
if (socket->state() == QAbstractSocket::ConnectedState)
socket->write(fileData);
else
{
emit disconnectedFromClient(m_IPAdress);
return;
}
bool write = socket->waitForBytesWritten();
logger.writeValue(write); // запись в лог
msleep(delayValue)
QCoreApplication::processEvents();
}
Если размер пакета относительно большой (>= 10 Кб), и таймаут маленький (<=50 мс) тогда waitForBytesWritten возвращает true.
Ежели размер пакета маленький и таймаут большой, тогда waitForBytesWritten возвращает false, но даже в этом случае 3 дефолтных секунды не ждет, а сразу возвращает.
Что это такое и почему так происходит? Как узать что байты дошли нормально?