我想获得Qt使用的SO_RCVBUF套接字选项的值,以确保它在默认情况下使用系统值(我更改了(。
但是以下代码返回一个"无效"的QVariant:
QUdpSocket socket;
qDebug() << socket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);
这是否意味着socketOption()
Qt方法只有在使用setSocketOption()
设置的情况下才能获得该值?
还是我犯了一个错误?
为了获得套接字信息,必须创建本机套接字,也就是说,获得除-1之外的socketDescriptor((,但在您的情况下,它没有连接,导致该值无法读取,返回无效的QVariant。
解决方案是连接套接字并分析套接字是否有效,以获得所需信息:
#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)