mirror of
https://github.com/godotengine/godot.git
synced 2025-10-25 18:54:43 +00:00
Fix local ip addresses (interfaces) detection.
Ignore non-IP addresses for both windows and unix
This commit is contained in:
parent
020f6a7f20
commit
a1c41be569
1 changed files with 11 additions and 4 deletions
|
|
@ -77,7 +77,7 @@ static IP_Address _sockaddr2ip(struct sockaddr *p_addr) {
|
||||||
if (p_addr->sa_family == AF_INET) {
|
if (p_addr->sa_family == AF_INET) {
|
||||||
struct sockaddr_in *addr = (struct sockaddr_in *)p_addr;
|
struct sockaddr_in *addr = (struct sockaddr_in *)p_addr;
|
||||||
ip.set_ipv4((uint8_t *)&(addr->sin_addr));
|
ip.set_ipv4((uint8_t *)&(addr->sin_addr));
|
||||||
} else {
|
} else if (p_addr->sa_family == AF_INET6) {
|
||||||
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr;
|
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr;
|
||||||
ip.set_ipv6(addr6->sin6_addr.s6_addr);
|
ip.set_ipv6(addr6->sin6_addr.s6_addr);
|
||||||
};
|
};
|
||||||
|
|
@ -180,15 +180,16 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||||
SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr);
|
SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr);
|
||||||
|
|
||||||
ip.set_ipv4((uint8_t *)&(ipv4->sin_addr));
|
ip.set_ipv4((uint8_t *)&(ipv4->sin_addr));
|
||||||
} else { // ipv6
|
r_addresses->push_back(ip);
|
||||||
|
|
||||||
|
} else if (address->Address.lpSockaddr->sa_family == AF_INET6) { // ipv6
|
||||||
|
|
||||||
SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr);
|
SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr);
|
||||||
|
|
||||||
ip.set_ipv6(ipv6->sin6_addr.s6_addr);
|
ip.set_ipv6(ipv6->sin6_addr.s6_addr);
|
||||||
|
r_addresses->push_back(ip);
|
||||||
};
|
};
|
||||||
|
|
||||||
r_addresses->push_back(ip);
|
|
||||||
|
|
||||||
address = address->Next;
|
address = address->Next;
|
||||||
};
|
};
|
||||||
adapter = adapter->Next;
|
adapter = adapter->Next;
|
||||||
|
|
@ -205,6 +206,7 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||||
|
|
||||||
struct ifaddrs *ifAddrStruct = NULL;
|
struct ifaddrs *ifAddrStruct = NULL;
|
||||||
struct ifaddrs *ifa = NULL;
|
struct ifaddrs *ifa = NULL;
|
||||||
|
int family;
|
||||||
|
|
||||||
getifaddrs(&ifAddrStruct);
|
getifaddrs(&ifAddrStruct);
|
||||||
|
|
||||||
|
|
@ -212,6 +214,11 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||||
if (!ifa->ifa_addr)
|
if (!ifa->ifa_addr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
family = ifa->ifa_addr->sa_family;
|
||||||
|
|
||||||
|
if (family != AF_INET && family != AF_INET6)
|
||||||
|
continue;
|
||||||
|
|
||||||
IP_Address ip = _sockaddr2ip(ifa->ifa_addr);
|
IP_Address ip = _sockaddr2ip(ifa->ifa_addr);
|
||||||
r_addresses->push_back(ip);
|
r_addresses->push_back(ip);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue