QUdpSocket теряет силу

У меня вопрос по поводу QUdpSocket:
Я получаю UDP-сообщения по порту 50011 на многоадресный адрес 239.0.0.1 примерно каждые 0,2 секунды (проверено Wireshark).

Следующий код работает хорошо (и печатает «VALID» в каждом сообщении) в течение ~ 1 минуты. После этого messageHandler не вызывается QUdpSocket's сигнал readyRead больше (хотя я дважды проверил с Wireshark, и сообщения все еще отправляются).

ServiceDiscovery::ServiceDiscovery(QObject *parent) :
QObject(parent),
socket(new QUdpSocket(this))
{
socket->bind(QHostAddress::AnyIPv4, 50011, QUdpSocket::ShareAddress);
socket->joinMulticastGroup(QHostAddress("239.0.0.1"));
connect(socket, &QUdpSocket::readyRead,
this, &ServiceDiscovery::messageHandler,
Qt::DirectConnection);
}

void ServiceDiscovery::messageHandler()
{
if(socket->isOpen()) qDebug("OPEN"); // Does not print, ofc.
if(socket->isReadable()) qDebug("READABLE"); // Does not print.
if(socket->isValid()) qDebug("VALID"); // Suddenly stops.

QByteArray datagram;
while(socket->hasPendingDatagrams()) {
datagram.resize(socket->pendingDatagramSize());
socket->readDatagram(datagram.data(), datagram.size());
Message response(datagram);
if(response.deserialize()) {
if(response.getServiceID() == constants::servicediscovery::SERVICE_ID) {
QByteArray payload = response.getPayload();
if(payload.size() >= 48) {
QString address = QHostAddress(payload.mid(32, 4).toHex().toUInt(nullptr, 16)).toString();
quint16 port = payload.mid(38, 2).toHex().toUInt(nullptr, 16);
emit found(address, port);
}
}
}
}
}

Что я здесь не так делаю?
Заранее спасибо.

РЕДАКТИРОВАТЬ: Из-за комментариев я также вставил обработку датаграмм.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]