Return both IPv6 and IPv4 address from the lookup.
We currently only return IPv4 address, which may cause issues in IPv6 networks
if we provide host name as the turn servers.
BUG=webrt:5871
R=juberti@google.com, pthatcher@webrtc.org
Review URL: https://codereview.webrtc.org/2083013008 .
Cr-Original-Commit-Position: refs/heads/master@{#13291}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 56c0b204901082376b84b2836227bfebbea97aeb
diff --git a/base/nethelpers.cc b/base/nethelpers.cc
index fddfdaf..1f6bb8d 100644
--- a/base/nethelpers.cc
+++ b/base/nethelpers.cc
@@ -44,8 +44,24 @@
addresses->clear();
struct addrinfo* result = NULL;
struct addrinfo hints = {0};
- // TODO(djw): For now this is IPv4 only so existing users remain unaffected.
- hints.ai_family = AF_INET;
+ hints.ai_family = family;
+ // |family| here will almost always be AF_UNSPEC, because |family| comes from
+ // AsyncResolver::addr_.family(), which comes from a SocketAddress constructed
+ // with a hostname. When a SocketAddress is constructed with a hostname, its
+ // family is AF_UNSPEC. However, if someday in the future we construct
+ // a SocketAddress with both a hostname and a family other than AF_UNSPEC,
+ // then it would be possible to get a specific family value here.
+
+ // The behavior of AF_UNSPEC is roughly "get both ipv4 and ipv6", as
+ // documented by the various operating systems:
+ // Linux: http://man7.org/linux/man-pages/man3/getaddrinfo.3.html
+ // Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/
+ // ms738520(v=vs.85).aspx
+ // Mac: https://developer.apple.com/legacy/library/documentation/Darwin/
+ // Reference/ManPages/man3/getaddrinfo.3.html
+ // Android (source code, not documentation):
+ // https://android.googlesource.com/platform/bionic/+/
+ // 7e0bfb511e85834d7c6cb9631206b62f82701d60/libc/netbsd/net/getaddrinfo.c#1657
hints.ai_flags = AI_ADDRCONFIG;
int ret = getaddrinfo(hostname.c_str(), NULL, &hints, &result);
if (ret != 0) {