Получить значение параметра сокета SO_RCVBUF из Qt
Я хочу получить значение параметра сокета SO_RCVBUF, используемого Qt, чтобы быть уверенным, что он по умолчанию использует системное значение (которое я изменил).
Но следующий фрагмент кода возвращает "Invalid" QVariant:
QUdpSocket socket;
qDebug() << socket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);
Означает ли это, что socketOption()
Метод Qt получает значение, только если оно было установлено с помощью setSocketOption()
?
Или я ошибся?
1 ответ
Решение
Чтобы получить информацию о сокете, должен быть создан собственный сокет, то есть получить socketDescriptor(), отличный от -1, но в вашем случае он не подключен, в результате чего это значение не читается, возвращая недопустимый 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)