从 Qt 获取 SO_RCVBUF 套接字选项值

Get SO_RCVBUF socket option value from Qt

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

但是下面的一段代码 returns 一个 "Invalid" QVariant:

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

是不是说socketOption()Qt方法只有用setSocketOption()设置了才取值?

还是我弄错了?

为了获取套接字信息,那么必须创建本机套接字,即获取一个不是-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)