| Index: runtime/bin/socket_linux.cc
|
| diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
|
| index 08d8fe1e840220f907c7a36e7ae995bdb5f754e3..693e5c3333b2253998508b886b08bc2b8ce8655f 100644
|
| --- a/runtime/bin/socket_linux.cc
|
| +++ b/runtime/bin/socket_linux.cc
|
| @@ -239,16 +239,22 @@ AddressList<SocketAddress>* Socket::LookupAddress(const char* host,
|
| memset(&hints, 0, sizeof(hints));
|
| hints.ai_family = SocketAddress::FromType(type);
|
| hints.ai_socktype = SOCK_STREAM;
|
| - hints.ai_flags = 0;
|
| + hints.ai_flags = (AI_V4MAPPED | AI_ADDRCONFIG);
|
| hints.ai_protocol = IPPROTO_TCP;
|
| struct addrinfo* info = NULL;
|
| int status = getaddrinfo(host, 0, &hints, &info);
|
| if (status != 0) {
|
| - ASSERT(*os_error == NULL);
|
| - *os_error = new OSError(status,
|
| - gai_strerror(status),
|
| - OSError::kGetAddressInfo);
|
| - return NULL;
|
| + // We failed, try without AI_ADDRCONFIG. This can happen when looking up
|
| + // e.g. '::1', when there are no global IPv6 addresses.
|
| + hints.ai_flags = AI_V4MAPPED;
|
| + status = getaddrinfo(host, 0, &hints, &info);
|
| + if (status != 0) {
|
| + ASSERT(*os_error == NULL);
|
| + *os_error = new OSError(status,
|
| + gai_strerror(status),
|
| + OSError::kGetAddressInfo);
|
| + return NULL;
|
| + }
|
| }
|
| intptr_t count = 0;
|
| for (struct addrinfo* c = info; c != NULL; c = c->ai_next) {
|
|
|