refactor(network): better network disconnection
This commit is contained in:
parent
aeec80f375
commit
d0370acb21
|
@ -20,7 +20,7 @@ class Network : public ALabel {
|
||||||
~Network();
|
~Network();
|
||||||
auto update() -> void;
|
auto update() -> void;
|
||||||
private:
|
private:
|
||||||
static const uint8_t MAX_RETRY = 10;
|
static const uint8_t MAX_RETRY = 5;
|
||||||
|
|
||||||
static int handleEvents(struct nl_msg*, void*);
|
static int handleEvents(struct nl_msg*, void*);
|
||||||
static int handleScan(struct nl_msg*, void*);
|
static int handleScan(struct nl_msg*, void*);
|
||||||
|
|
|
@ -82,7 +82,7 @@ void waybar::modules::Network::createInfoSocket()
|
||||||
{
|
{
|
||||||
auto fd = nl_socket_get_fd(info_sock_);
|
auto fd = nl_socket_get_fd(info_sock_);
|
||||||
struct epoll_event event;
|
struct epoll_event event;
|
||||||
event.events = EPOLLIN;
|
event.events = EPOLLIN | EPOLLET | EPOLLRDHUP;
|
||||||
event.data.fd = fd;
|
event.data.fd = fd;
|
||||||
if (epoll_ctl(efd_, EPOLL_CTL_ADD, fd, &event) == -1) {
|
if (epoll_ctl(efd_, EPOLL_CTL_ADD, fd, &event) == -1) {
|
||||||
throw std::runtime_error("Can't add epoll event");
|
throw std::runtime_error("Can't add epoll event");
|
||||||
|
@ -119,8 +119,7 @@ void waybar::modules::Network::worker()
|
||||||
int ec = epoll_wait(efd_, events, 16, -1);
|
int ec = epoll_wait(efd_, events, 16, -1);
|
||||||
if (ec > 0) {
|
if (ec > 0) {
|
||||||
for (auto i = 0; i < ec; i++) {
|
for (auto i = 0; i < ec; i++) {
|
||||||
if (events[i].events & EPOLLIN
|
if (events[i].data.fd == nl_socket_get_fd(info_sock_)) {
|
||||||
&& events[i].data.fd == nl_socket_get_fd(info_sock_)) {
|
|
||||||
nl_recvmsgs_default(info_sock_);
|
nl_recvmsgs_default(info_sock_);
|
||||||
} else {
|
} else {
|
||||||
thread_.stop();
|
thread_.stop();
|
||||||
|
@ -313,6 +312,9 @@ out:
|
||||||
void waybar::modules::Network::getInterfaceAddress() {
|
void waybar::modules::Network::getInterfaceAddress() {
|
||||||
unsigned int cidrRaw;
|
unsigned int cidrRaw;
|
||||||
struct ifaddrs *ifaddr, *ifa;
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
ipaddr_.clear();
|
||||||
|
netmask_.clear();
|
||||||
|
cidr_ = 0;
|
||||||
int success = getifaddrs(&ifaddr);
|
int success = getifaddrs(&ifaddr);
|
||||||
if (success == 0) {
|
if (success == 0) {
|
||||||
ifa = ifaddr;
|
ifa = ifaddr;
|
||||||
|
@ -333,10 +335,6 @@ void waybar::modules::Network::getInterfaceAddress() {
|
||||||
ifa = ifa->ifa_next;
|
ifa = ifa->ifa_next;
|
||||||
}
|
}
|
||||||
freeifaddrs(ifaddr);
|
freeifaddrs(ifaddr);
|
||||||
} else {
|
|
||||||
ipaddr_.clear();
|
|
||||||
netmask_.clear();
|
|
||||||
cidr_ = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,6 +377,7 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
if (!(rtif->ifi_flags & IFF_RUNNING)) {
|
if (!(rtif->ifi_flags & IFF_RUNNING)) {
|
||||||
net->disconnected();
|
net->disconnected();
|
||||||
|
net->dp.emit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue