QUdpSocket :: writeDatagram,等待缓冲区空闲

时间:2016-07-04 14:11:37

标签: qt

我正在使用方法QUdpSocket :: writeDatagram并发送大量数据。当套接字已满时,该方法返回-1。是否可以使用QUdpSocket做一些像select()的事情?

while(!counterList.empty())
{
    CounterValuePtr value = counterList.dequeue();
    if (mUdpSocket->bytesToWrite() <= 1<<13)
    {
        const QByteArray datagram = toDatagram(*value);

        qint64 sentBytes = 0;
        try
        {
            sentBytes = mUdpSocket->writeDatagram(datagram, QHostAddress(mSettings->getConnectionIp()), mSettings->getConnectionPort());
        }
        catch(...)
        {
            emit dataLost();
            qWarning() << "Exception";
            throw;
        }

        qDebug() << datagram;
        if(sentBytes == -1)
        {
            QString errorMsg = getErrorMsg(WSAGetLastError());
            qWarning() << "SocketError (" << mUdpSocket->error() << ") : " << mUdpSocket->errorString() << ". " << errorMsg;
            emit dataLost();
        }
        else if(sentBytes < datagram.size())
        {
            qWarning() << "Not all data sent";
            emit dataLost();
        }
        else
        {
            qDebug() << "Counter "<< value->getName() << " sent";
            datasent = true;
            emit dataSent();
        }
    }
    else
    {
        qWarning() << "Socket write buffer full. Dropping data.";
        emit dataLost();
    }
}

有时,writeDatagram返回-1。当我用WSAGetLastError打印最后一个错误时,它打印缓冲区已满。

0 个答案:

没有答案