cache getifaddrs - windows

This commit is contained in:
travis laduke 2023-05-17 07:18:42 -07:00 committed by Travis LaDuke
parent 60d2138f30
commit e11d70e408
2 changed files with 15 additions and 1 deletions

View File

@ -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;
}

View File

@ -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