Browse Source

cache getifaddrs - windows

pull/4/head
travis laduke 3 years ago committed by Travis LaDuke
parent
commit
e11d70e408
  1. 13
      osdep/WindowsEthernetTap.cpp
  2. 3
      osdep/WindowsEthernetTap.hpp

13
osdep/WindowsEthernetTap.cpp

@ -467,7 +467,8 @@ WindowsEthernetTap::WindowsEthernetTap(
_pathToHelpers(hp),
_run(true),
_initialized(false),
_enabled(true)
_enabled(true),
_lastIfAddrsUpdate(0)
{
char subkeyName[1024];
char subkeyClass[1024];
@ -749,6 +750,14 @@ std::vector<InetAddress> WindowsEthernetTap::ips() const
if (!_initialized)
return addrs;
uint64_t now = OSUtils::now();
if ((now - _lastIfAddrsUpdate) <= GETIFADDRS_CACHE_TIME) {
return _ifaddrs;
}
_lastIfAddrsUpdate = now;
try {
MIB_UNICASTIPADDRESS_TABLE *ipt = (MIB_UNICASTIPADDRESS_TABLE *)0;
if (GetUnicastIpAddressTable(AF_UNSPEC,&ipt) == NO_ERROR) {
@ -777,6 +786,8 @@ std::vector<InetAddress> WindowsEthernetTap::ips() const
std::sort(addrs.begin(),addrs.end());
addrs.erase(std::unique(addrs.begin(),addrs.end()),addrs.end());
_ifaddrs = addrs;
return addrs;
}

3
osdep/WindowsEthernetTap.hpp

@ -152,6 +152,9 @@ private:
volatile bool _run;
volatile bool _initialized;
volatile bool _enabled;
mutable std::vector<InetAddress> _ifaddrs;
mutable uint64_t _lastIfAddrsUpdate;
};
} // namespace ZeroTier

Loading…
Cancel
Save