diff --git a/networkdetector/devicemonitor.cpp b/networkdetector/devicemonitor.cpp index 1df86b72..cb4d1200 100644 --- a/networkdetector/devicemonitor.cpp +++ b/networkdetector/devicemonitor.cpp @@ -61,7 +61,7 @@ void DeviceMonitor::ping() return; } - m_pingProcess->start("arping", {"-I", targetInterface.name(), "-f", "-w", "180", m_host->address()}); + m_pingProcess->start("arping", {"-I", targetInterface.name(), "-f", "-w", "90", m_host->address()}); } void DeviceMonitor::arpLookupFinished(int exitCode) @@ -97,6 +97,7 @@ void DeviceMonitor::arpLookupFinished(int exitCode) } // If we have a reachable entry, stop processing here needsPing = false; + m_failedPings = 0; break; } else { // ARP claims the device to be stale... Flagging device to require a ping. @@ -138,9 +139,11 @@ void DeviceMonitor::pingFinished(int exitCode) emit reachableChanged(true); } emit seen(); + m_failedPings = 0; } else { qCDebug(dcNetworkDetector()) << "Could not ping device" << m_host->macAddress() << m_host->address(); - if (m_host->reachable()) { + m_failedPings++; + if (m_failedPings > 3 && m_host->reachable()) { m_host->setReachable(false); emit reachableChanged(false); } diff --git a/networkdetector/devicemonitor.h b/networkdetector/devicemonitor.h index 28fce3bd..b3764ea5 100644 --- a/networkdetector/devicemonitor.h +++ b/networkdetector/devicemonitor.h @@ -33,6 +33,7 @@ private: Host *m_host; QProcess *m_arpLookupProcess; QProcess *m_pingProcess; + int m_failedPings = 0; };