Russian Qt Forum

Qt => Работа с сетью => Тема начата: RedDog от Ноябрь 14, 2011, 09:24



Название: waitForBytesWritten непонятна логика работы
Отправлено: RedDog от Ноябрь 14, 2011, 09:24
Отправляю с сервера на клиента поток данных (из файла)

Код:
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 дефолтных секунды не ждет, а сразу возвращает.
Что это такое и почему так происходит? Как узать что байты дошли нормально?