Manually generate IPv6 link-local address only on Mac.

This commit is contained in:
Adam Ierymenko 2014-02-01 14:02:14 -08:00
parent 64231aa3f0
commit 2a3e646b94

View File

@ -148,15 +148,23 @@ public:
for(std::set<InetAddress>::iterator i(allIps.begin());i!=allIps.end();++i) for(std::set<InetAddress>::iterator i(allIps.begin());i!=allIps.end();++i)
addIP(*i); addIP(*i);
std::set<InetAddress> myIps(ips()); std::set<InetAddress> myIps(ips());
#ifdef __APPLE__
bool haveV6LinkLocal = false; bool haveV6LinkLocal = false;
for(std::set<InetAddress>::iterator i(myIps.begin());i!=myIps.end();++i) { for(std::set<InetAddress>::iterator i(myIps.begin());i!=myIps.end();++i) {
if ((i->isV6())&&(i->isLinkLocal())) if (i->isLinkLocal()) {
haveV6LinkLocal = true; if (i->isV6())
else if (!allIps.count(*i)) haveV6LinkLocal = true;
} else if (!allIps.count(*i))
removeIP(*i); removeIP(*i);
} }
if (!haveV6LinkLocal) if (!haveV6LinkLocal)
addIP(InetAddress::makeIpv6LinkLocal(_mac)); addIP(InetAddress::makeIpv6LinkLocal(_mac));
#else
for(std::set<InetAddress>::iterator i(myIps.begin());i!=myIps.end();++i) {
if ((!i->isLinkLocal())&&(!allIps.count(*i)))
removeIP(*i);
}
#endif
} }
/** /**