我想获取 Qt 使用的 SO_RCVBUF 套接字选项的值,以确保它默认使用系统值(我已更改)。
但以下代码返回“无效”QVariant:
QUdpSocket socket;
qDebug() << socket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);
这是否意味着socketOption()
Qt 方法仅在使用 设置时才获取值setSocketOption()
?
还是我犯了一个错误?
我想获取 Qt 使用的 SO_RCVBUF 套接字选项的值,以确保它默认使用系统值(我已更改)。
但以下代码返回“无效”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)