Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Return IPv4 addresses before IPv6 addresses from getaddrinfo

  • Loading branch information...
ry committed Oct 26, 2011
1 parent 3524f41 commit 194511ff1a0309e01f6cad03292ccc2e67134390
Showing with 27 additions and 6 deletions.
  1. +27 −6 src/cares_wrap.cc
@@ -627,31 +627,52 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {

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.
address = res;
while (address) {
assert(address->ai_socktype == SOCK_STREAM);

// Ignore random ai_family types.
if (address->ai_family == AF_INET || address->ai_family == AF_INET6) {
if (address->ai_family == AF_INET) {
// Juggle pointers
addr = (address->ai_family == AF_INET ?
(char*) &((struct sockaddr_in*) address->ai_addr)->sin_addr :
(char*) &((struct sockaddr_in6*) address->ai_addr)->sin6_addr);
addr = (char*) &((struct sockaddr_in*) address->ai_addr)->sin_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;
}

// 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
n++;
address = address->ai_next;
}


argv[0] = results;
}

0 comments on commit 194511f

Please sign in to comment.
You can’t perform that action at this time.