1

我想获取 Qt 使用的 SO_RCVBUF 套接字选项的值,以确保它默认使用系统值(我已更改)。

但以下代码返回“无效”QVariant:

QUdpSocket socket;
qDebug() << socket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);

这是否意味着socketOption()Qt 方法仅在使用 设置时才获取值setSocketOption()

还是我犯了一个错误?

4

1 回答 1

1

为了获取套接字信息,必须已经创建了本机套接字,即获取一个非 -1 的 socketDescriptor(),但在你的情况下它没有连接导致该值不被读取,返回一个无效的 QVariant .

解决方法是连接socket,分析socket是否有效,获取想要的信息:

#include <QCoreApplication>
#include <QTimer>
#include <QUdpSocket>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QUdpSocket socket;
    QObject::connect(&socket, &QAbstractSocket::stateChanged, [&socket](){
        if(socket.socketDescriptor() != -1){
            qDebug() << socket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);
            // kill application
            QTimer::singleShot(1000, &QCoreApplication::quit);
        }
    });
    socket.bind(QHostAddress::LocalHost, 1234);
    return a.exec();
}

输出:

QVariant(int, 212992)
于 2020-04-03T14:56:30.700 回答