OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/socket/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 // Create a |SocketPerformanceWatcher|, and pass the ownership. | 293 // Create a |SocketPerformanceWatcher|, and pass the ownership. |
294 std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher; | 294 std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher; |
295 if (socket_performance_watcher_factory_) { | 295 if (socket_performance_watcher_factory_) { |
296 socket_performance_watcher = | 296 socket_performance_watcher = |
297 socket_performance_watcher_factory_->CreateSocketPerformanceWatcher( | 297 socket_performance_watcher_factory_->CreateSocketPerformanceWatcher( |
298 SocketPerformanceWatcherFactory::PROTOCOL_TCP); | 298 SocketPerformanceWatcherFactory::PROTOCOL_TCP); |
299 } | 299 } |
300 transport_socket_ = client_socket_factory_->CreateTransportClientSocket( | 300 transport_socket_ = client_socket_factory_->CreateTransportClientSocket( |
301 addresses_, std::move(socket_performance_watcher), net_log().net_log(), | 301 addresses_, std::move(socket_performance_watcher), net_log().net_log(), |
302 net_log().source()); | 302 net_log().source()); |
| 303 transport_socket_->SetFailOnSuspend(true); |
303 | 304 |
304 // If the list contains IPv6 and IPv4 addresses, the first address will | 305 // If the list contains IPv6 and IPv4 addresses, the first address will |
305 // be IPv6, and the IPv4 addresses will be tried as fallback addresses, | 306 // be IPv6, and the IPv4 addresses will be tried as fallback addresses, |
306 // per "Happy Eyeballs" (RFC 6555). | 307 // per "Happy Eyeballs" (RFC 6555). |
307 bool try_ipv6_connect_with_ipv4_fallback = | 308 bool try_ipv6_connect_with_ipv4_fallback = |
308 addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV6 && | 309 addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV6 && |
309 !AddressListOnlyContainsIPv6(addresses_); | 310 !AddressListOnlyContainsIPv6(addresses_); |
310 | 311 |
311 // Enable TCP FastOpen if indicated by transport socket params. | 312 // Enable TCP FastOpen if indicated by transport socket params. |
312 // Note: We currently do not turn on TCP FastOpen for destinations where | 313 // Note: We currently do not turn on TCP FastOpen for destinations where |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 socket_performance_watcher_factory_->CreateSocketPerformanceWatcher( | 384 socket_performance_watcher_factory_->CreateSocketPerformanceWatcher( |
384 SocketPerformanceWatcherFactory::PROTOCOL_TCP); | 385 SocketPerformanceWatcherFactory::PROTOCOL_TCP); |
385 } | 386 } |
386 | 387 |
387 fallback_addresses_.reset(new AddressList(addresses_)); | 388 fallback_addresses_.reset(new AddressList(addresses_)); |
388 MakeAddressListStartWithIPv4(fallback_addresses_.get()); | 389 MakeAddressListStartWithIPv4(fallback_addresses_.get()); |
389 fallback_transport_socket_ = | 390 fallback_transport_socket_ = |
390 client_socket_factory_->CreateTransportClientSocket( | 391 client_socket_factory_->CreateTransportClientSocket( |
391 *fallback_addresses_, std::move(socket_performance_watcher), | 392 *fallback_addresses_, std::move(socket_performance_watcher), |
392 net_log().net_log(), net_log().source()); | 393 net_log().net_log(), net_log().source()); |
| 394 fallback_transport_socket_->SetFailOnSuspend(true); |
393 fallback_connect_start_time_ = base::TimeTicks::Now(); | 395 fallback_connect_start_time_ = base::TimeTicks::Now(); |
394 int rv = fallback_transport_socket_->Connect( | 396 int rv = fallback_transport_socket_->Connect( |
395 base::Bind( | 397 base::Bind( |
396 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete, | 398 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete, |
397 base::Unretained(this))); | 399 base::Unretained(this))); |
398 if (rv != ERR_IO_PENDING) | 400 if (rv != ERR_IO_PENDING) |
399 DoIPv6FallbackTransportConnectComplete(rv); | 401 DoIPv6FallbackTransportConnectComplete(rv); |
400 } | 402 } |
401 | 403 |
402 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) { | 404 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) { |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 HigherLayeredPool* higher_pool) { | 596 HigherLayeredPool* higher_pool) { |
595 base_.AddHigherLayeredPool(higher_pool); | 597 base_.AddHigherLayeredPool(higher_pool); |
596 } | 598 } |
597 | 599 |
598 void TransportClientSocketPool::RemoveHigherLayeredPool( | 600 void TransportClientSocketPool::RemoveHigherLayeredPool( |
599 HigherLayeredPool* higher_pool) { | 601 HigherLayeredPool* higher_pool) { |
600 base_.RemoveHigherLayeredPool(higher_pool); | 602 base_.RemoveHigherLayeredPool(higher_pool); |
601 } | 603 } |
602 | 604 |
603 } // namespace net | 605 } // namespace net |
OLD | NEW |