CattaInterfaceAddress *ifaddr;
struct sockaddr *sa = a->Address.lpSockaddr;
+ // skip transient addresses; to quote MSDN: "The IP address is a cluster
+ // address and should not be used by most applications."
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/aa366066(v=vs.85).aspx
+ if(a->Flags & IP_ADAPTER_ADDRESS_TRANSIENT)
+ return;
+
// fill addr struct for address lookup
switch(sa->sa_family) {
case AF_INET:
}
// set global scope flag
+ // XXX should we use the IP_ADAPTER_ADDRESS_DNS_ELIGIBLE flag for this?
+ // it looks like it gets set for IPv4 addresses that are not localhost
+ // and for IPv6 addresses with global scope. not sure about multicast
+ // addresses.
if(addr.proto == CATTA_PROTO_INET6)
ifaddr->global_scope = !(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)addr.data.data)
|| IN6_IS_ADDR_MULTICAST((struct in6_addr *)addr.data.data));