Return IPv4 addresses before IPv6 addresses from getaddrinfo
This commit is contained in:
parent
3524f41a27
commit
194511ff1a
@ -627,31 +627,52 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
|
|||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|
||||||
// Iterate over the responses again this time creating javascript
|
// Iterate over the IPv4 responses again this time creating javascript
|
||||||
// strings for each IP and filling the results array.
|
// strings for each IP and filling the results array.
|
||||||
address = res;
|
address = res;
|
||||||
while (address) {
|
while (address) {
|
||||||
assert(address->ai_socktype == SOCK_STREAM);
|
assert(address->ai_socktype == SOCK_STREAM);
|
||||||
|
|
||||||
// Ignore random ai_family types.
|
// Ignore random ai_family types.
|
||||||
if (address->ai_family == AF_INET || address->ai_family == AF_INET6) {
|
if (address->ai_family == AF_INET) {
|
||||||
// Juggle pointers
|
// Juggle pointers
|
||||||
addr = (address->ai_family == AF_INET ?
|
addr = (char*) &((struct sockaddr_in*) address->ai_addr)->sin_addr;
|
||||||
(char*) &((struct sockaddr_in*) address->ai_addr)->sin_addr :
|
|
||||||
(char*) &((struct sockaddr_in6*) address->ai_addr)->sin6_addr);
|
|
||||||
const char* c = uv_inet_ntop(address->ai_family, addr, ip,
|
const char* c = uv_inet_ntop(address->ai_family, addr, ip,
|
||||||
INET6_ADDRSTRLEN);
|
INET6_ADDRSTRLEN);
|
||||||
|
|
||||||
// Create JavaScript string
|
// Create JavaScript string
|
||||||
Local<String> s = String::New(c);
|
Local<String> s = String::New(c);
|
||||||
results->Set(n, s);
|
results->Set(n, s);
|
||||||
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Increment
|
// Increment
|
||||||
n++;
|
|
||||||
address = address->ai_next;
|
address = address->ai_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Iterate over the IPv6 responses putting them in the array.
|
||||||
|
address = res;
|
||||||
|
while (address) {
|
||||||
|
assert(address->ai_socktype == SOCK_STREAM);
|
||||||
|
|
||||||
|
// Ignore random ai_family types.
|
||||||
|
if (address->ai_family == AF_INET6) {
|
||||||
|
// Juggle pointers
|
||||||
|
addr = (char*) &((struct sockaddr_in6*) address->ai_addr)->sin6_addr;
|
||||||
|
const char* c = uv_inet_ntop(address->ai_family, addr, ip,
|
||||||
|
INET6_ADDRSTRLEN);
|
||||||
|
|
||||||
|
// Create JavaScript string
|
||||||
|
Local<String> s = String::New(c);
|
||||||
|
results->Set(n, s);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increment
|
||||||
|
address = address->ai_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
argv[0] = results;
|
argv[0] = results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user