OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <Winsock2.h> | 8 #include <Winsock2.h> |
9 #elif defined(OS_POSIX) | 9 #elif defined(OS_POSIX) |
10 #include <netdb.h> | 10 #include <netdb.h> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 | 92 |
93 return cache; | 93 return cache; |
94 } | 94 } |
95 | 95 |
96 // Gets a list of the likely error codes that getaddrinfo() can return | 96 // Gets a list of the likely error codes that getaddrinfo() can return |
97 // (non-exhaustive). These are the error codes that we will track via | 97 // (non-exhaustive). These are the error codes that we will track via |
98 // a histogram. | 98 // a histogram. |
99 std::vector<int> GetAllGetAddrinfoOSErrors() { | 99 std::vector<int> GetAllGetAddrinfoOSErrors() { |
100 int os_errors[] = { | 100 int os_errors[] = { |
101 #if defined(OS_POSIX) | 101 #if defined(OS_POSIX) |
| 102 #if !defined(OS_FREEBSD) |
102 EAI_ADDRFAMILY, | 103 EAI_ADDRFAMILY, |
| 104 EAI_NODATA, |
| 105 #endif |
103 EAI_AGAIN, | 106 EAI_AGAIN, |
104 EAI_BADFLAGS, | 107 EAI_BADFLAGS, |
105 EAI_FAIL, | 108 EAI_FAIL, |
106 EAI_FAMILY, | 109 EAI_FAMILY, |
107 EAI_MEMORY, | 110 EAI_MEMORY, |
108 EAI_NODATA, | |
109 EAI_NONAME, | 111 EAI_NONAME, |
110 EAI_SERVICE, | 112 EAI_SERVICE, |
111 EAI_SOCKTYPE, | 113 EAI_SOCKTYPE, |
112 EAI_SYSTEM, | 114 EAI_SYSTEM, |
113 #elif defined(OS_WIN) | 115 #elif defined(OS_WIN) |
114 // See: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx | 116 // See: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx |
115 WSA_NOT_ENOUGH_MEMORY, | 117 WSA_NOT_ENOUGH_MEMORY, |
116 WSAEAFNOSUPPORT, | 118 WSAEAFNOSUPPORT, |
117 WSAEINVAL, | 119 WSAEINVAL, |
118 WSAESOCKTNOSUPPORT, | 120 WSAESOCKTNOSUPPORT, |
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 if (max_retry_attempts_ == HostResolver::kDefaultRetryAttempts) | 1053 if (max_retry_attempts_ == HostResolver::kDefaultRetryAttempts) |
1052 max_retry_attempts_ = kDefaultMaxRetryAttempts; | 1054 max_retry_attempts_ = kDefaultMaxRetryAttempts; |
1053 | 1055 |
1054 // It is cumbersome to expose all of the constraints in the constructor, | 1056 // It is cumbersome to expose all of the constraints in the constructor, |
1055 // so we choose some defaults, which users can override later. | 1057 // so we choose some defaults, which users can override later. |
1056 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs); | 1058 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs); |
1057 | 1059 |
1058 #if defined(OS_WIN) | 1060 #if defined(OS_WIN) |
1059 EnsureWinsockInit(); | 1061 EnsureWinsockInit(); |
1060 #endif | 1062 #endif |
1061 #if defined(OS_LINUX) | 1063 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
1062 if (HaveOnlyLoopbackAddresses()) | 1064 if (HaveOnlyLoopbackAddresses()) |
1063 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; | 1065 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; |
1064 #endif | 1066 #endif |
1065 NetworkChangeNotifier::AddIPAddressObserver(this); | 1067 NetworkChangeNotifier::AddIPAddressObserver(this); |
1066 } | 1068 } |
1067 | 1069 |
1068 HostResolverImpl::~HostResolverImpl() { | 1070 HostResolverImpl::~HostResolverImpl() { |
1069 // Cancel the outstanding jobs. Those jobs may contain several attached | 1071 // Cancel the outstanding jobs. Those jobs may contain several attached |
1070 // requests, which will also be cancelled. | 1072 // requests, which will also be cancelled. |
1071 DiscardIPv6ProbeJob(); | 1073 DiscardIPv6ProbeJob(); |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1591 if (cache_.get()) | 1593 if (cache_.get()) |
1592 cache_->clear(); | 1594 cache_->clear(); |
1593 if (ipv6_probe_monitoring_) { | 1595 if (ipv6_probe_monitoring_) { |
1594 DCHECK(!shutdown_); | 1596 DCHECK(!shutdown_); |
1595 if (shutdown_) | 1597 if (shutdown_) |
1596 return; | 1598 return; |
1597 DiscardIPv6ProbeJob(); | 1599 DiscardIPv6ProbeJob(); |
1598 ipv6_probe_job_ = new IPv6ProbeJob(this); | 1600 ipv6_probe_job_ = new IPv6ProbeJob(this); |
1599 ipv6_probe_job_->Start(); | 1601 ipv6_probe_job_->Start(); |
1600 } | 1602 } |
1601 #if defined(OS_LINUX) | 1603 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
1602 if (HaveOnlyLoopbackAddresses()) { | 1604 if (HaveOnlyLoopbackAddresses()) { |
1603 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; | 1605 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; |
1604 } else { | 1606 } else { |
1605 additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY; | 1607 additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY; |
1606 } | 1608 } |
1607 #endif | 1609 #endif |
1608 AbortAllInProgressJobs(); | 1610 AbortAllInProgressJobs(); |
1609 // |this| may be deleted inside AbortAllInProgressJobs(). | 1611 // |this| may be deleted inside AbortAllInProgressJobs(). |
1610 } | 1612 } |
1611 | 1613 |
1612 } // namespace net | 1614 } // namespace net |
OLD | NEW |