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