从Qt中获取SO_RCVBUF套接字选项值



我想获得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)

相关内容

  • 没有找到相关文章

最新更新