当前位置:网站首页>QtMqtt 源码编译设置KeepAlive后ping包超时错误不返回问题修复(QMQTT::MqttNoPingResponse,QMQTT::ClientPrivate::onPingTimeo)

QtMqtt 源码编译设置KeepAlive后ping包超时错误不返回问题修复(QMQTT::MqttNoPingResponse,QMQTT::ClientPrivate::onPingTimeo)

2022-06-10 17:38:00 _Hello Spring

调用 setKeepAlive() 设置心跳包后,心跳可以正常收发

在这里插入图片描述

此时断开网络出现如下情况

在这里插入图片描述

明显出现还未超时就重启了超时定时器,查看源码如下:

void QMQTT::ClientPrivate::onTimerPingReq()
{
    
    if (!isConnectedToHost())
        return;
    Frame frame(PINGREQ);
    sendFrame(frame);
    _pingResponseTimer.start();  // 直接就重启了定时器永远不会超时
}

在启动超时定时器时判断定时器是否活动,处于非活动状态才能启动,修改代码如下:

void QMQTT::ClientPrivate::onTimerPingReq()
{
    
    if (!isConnectedToHost())
        return;
    Frame frame(PINGREQ);
    sendFrame(frame);
    if(!_pingResponseTimer.isActive()) {
    
        _pingResponseTimer.start();
    }
}

修改完后编译测试可正常超时断连。

在这里插入图片描述

原网站

版权声明
本文为[_Hello Spring]所创,转载请带上原文链接,感谢
https://blog.csdn.net/wct3344142/article/details/124982158