X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.cpp;h=dedd819efc1754b0003159a33735f3c567ee650e;hb=2edce2d2a5274d4e797aca1f78a2b89fc688f8a1;hp=a35704414402710cc8798bf3815c66829d53b896;hpb=dbef809f160236d05e93256d8309085225b8b928;p=quassel.git diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index a3570441..dedd819e 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -41,6 +41,8 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) _lastUsedServerIndex(0), _lastPingTime(0), + _maxPingCount(3), + _pingCount(0), // TODO make autowho configurable (possibly per-network) _autoWhoEnabled(true), @@ -516,13 +518,14 @@ void CoreNetwork::doAutoReconnect() { void CoreNetwork::sendPing() { uint now = QDateTime::currentDateTime().toTime_t(); - if(_lastPingTime != 0 && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) { + if(_pingCount >= _maxPingCount && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) { // the second check compares the actual elapsed time since the last ping and the pingTimer interval // if the interval is shorter then the actual elapsed time it means that this thread was somehow blocked // and unable to even handle a ping answer. So we ignore those misses. - disconnectFromIrc(false, QString("No Ping reply in %1 seconds.").arg(_pingTimer.interval() / 1000), true /* withReconnect */); + disconnectFromIrc(false, QString("No Ping reply in %1 seconds.").arg(_maxPingCount * _pingTimer.interval() / 1000), true /* withReconnect */); } else { _lastPingTime = now; + _pingCount++; userInputHandler()->handlePing(BufferInfo(), QString()); } }