| Index: webrtc/base/nethelpers.cc
|
| diff --git a/webrtc/base/nethelpers.cc b/webrtc/base/nethelpers.cc
|
| index fddfdaf58b5832318fe4f73d4f2ad7262f5b03bf..1f6bb8df7b7f71628524df9bd1fa27240ab9fe7b 100644
|
| --- a/webrtc/base/nethelpers.cc
|
| +++ b/webrtc/base/nethelpers.cc
|
| @@ -44,8 +44,24 @@ int ResolveHostname(const std::string& hostname, int family,
|
| 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) {
|
|
|