diff --git a/include/modules/network.hpp b/include/modules/network.hpp index 81fde0a5..192fc527 100644 --- a/include/modules/network.hpp +++ b/include/modules/network.hpp @@ -20,6 +20,8 @@ class Network : public ALabel { ~Network(); auto update() -> void; private: + static const uint8_t MAX_RETRY = 10; + static int handleEvents(struct nl_msg*, void*); static int handleScan(struct nl_msg*, void*); diff --git a/src/modules/network.cpp b/src/modules/network.cpp index b234930c..0b0ea904 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -383,9 +383,14 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) { } } if (net->ifid_ <= 0 && !net->config_["interface"].isString()) { - // Need to wait before get external interface - net->thread_.sleep_for(std::chrono::seconds(1)); - net->ifid_ = net->getExternalInterface(); + for (uint8_t i = 0; i < MAX_RETRY; i += 1) { + net->ifid_ = net->getExternalInterface(); + if (net->ifid_ > 0) { + break; + } + // Need to wait before get external interface + net->thread_.sleep_for(std::chrono::seconds(1)); + } if (net->ifid_ > 0) { char ifname[IF_NAMESIZE]; if_indextoname(net->ifid_, ifname);