Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: net/base/tcp_client_socket_pool.h

Issue 118100: Avoid doing concurrent DNS resolves of the same hostname (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Get compiling on mac Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 #ifndef NET_BASE_TCP_CLIENT_SOCKET_POOL_H_ 5 #ifndef NET_BASE_TCP_CLIENT_SOCKET_POOL_H_
6 #define NET_BASE_TCP_CLIENT_SOCKET_POOL_H_ 6 #define NET_BASE_TCP_CLIENT_SOCKET_POOL_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 11
12 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
13 #include "base/timer.h" 13 #include "base/timer.h"
14 #include "net/base/address_list.h" 14 #include "net/base/address_list.h"
15 #include "net/base/client_socket_pool.h" 15 #include "net/base/client_socket_pool.h"
16 #include "net/base/host_resolver.h" 16 #include "net/base/host_resolver.h"
17 17
18 namespace net { 18 namespace net {
19 19
20 class ClientSocketFactory; 20 class ClientSocketFactory;
21 21
22 // A TCPClientSocketPool is used to restrict the number of TCP sockets open at 22 // A TCPClientSocketPool is used to restrict the number of TCP sockets open at
23 // a time. It also maintains a list of idle persistent sockets. 23 // a time. It also maintains a list of idle persistent sockets.
24 // 24 //
25 class TCPClientSocketPool : public ClientSocketPool { 25 class TCPClientSocketPool : public ClientSocketPool {
26 public: 26 public:
27 TCPClientSocketPool(int max_sockets_per_group, 27 TCPClientSocketPool(int max_sockets_per_group,
28 HostResolver* host_resolver,
28 ClientSocketFactory* client_socket_factory); 29 ClientSocketFactory* client_socket_factory);
29 30
30 // ClientSocketPool methods: 31 // ClientSocketPool methods:
31 32
32 virtual int RequestSocket(const std::string& group_name, 33 virtual int RequestSocket(const std::string& group_name,
33 const std::string& host, 34 const std::string& host,
34 int port, 35 int port,
35 int priority, 36 int priority,
36 ClientSocketHandle* handle, 37 ClientSocketHandle* handle,
37 CompletionCallback* callback); 38 CompletionCallback* callback);
38 39
39 virtual void CancelRequest(const std::string& group_name, 40 virtual void CancelRequest(const std::string& group_name,
40 const ClientSocketHandle* handle); 41 const ClientSocketHandle* handle);
41 42
42 virtual void ReleaseSocket(const std::string& group_name, 43 virtual void ReleaseSocket(const std::string& group_name,
43 ClientSocket* socket); 44 ClientSocket* socket);
44 45
45 virtual void CloseIdleSockets(); 46 virtual void CloseIdleSockets();
46 47
48 virtual HostResolver* GetHostResolver() const {
49 return host_resolver_;
50 }
51
47 virtual int idle_socket_count() const { 52 virtual int idle_socket_count() const {
48 return idle_socket_count_; 53 return idle_socket_count_;
49 } 54 }
50 55
51 virtual int IdleSocketCountInGroup(const std::string& group_name) const; 56 virtual int IdleSocketCountInGroup(const std::string& group_name) const;
52 57
53 virtual LoadState GetLoadState(const std::string& group_name, 58 virtual LoadState GetLoadState(const std::string& group_name,
54 const ClientSocketHandle* handle) const; 59 const ClientSocketHandle* handle) const;
55 60
56 private: 61 private:
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 // asynchronously. OnIOCompleteInternal returns the result of the next IO 135 // asynchronously. OnIOCompleteInternal returns the result of the next IO
131 // operation that executes, or just the value of |result|. 136 // operation that executes, or just the value of |result|.
132 int OnIOCompleteInternal(int result, bool synchronous); 137 int OnIOCompleteInternal(int result, bool synchronous);
133 138
134 const std::string group_name_; 139 const std::string group_name_;
135 const ClientSocketHandle* const handle_; 140 const ClientSocketHandle* const handle_;
136 ClientSocketFactory* const client_socket_factory_; 141 ClientSocketFactory* const client_socket_factory_;
137 CompletionCallbackImpl<ConnectingSocket> callback_; 142 CompletionCallbackImpl<ConnectingSocket> callback_;
138 scoped_ptr<ClientSocket> socket_; 143 scoped_ptr<ClientSocket> socket_;
139 scoped_refptr<TCPClientSocketPool> pool_; 144 scoped_refptr<TCPClientSocketPool> pool_;
140 HostResolver resolver_; 145 SingleRequestHostResolver resolver_;
141 AddressList addresses_; 146 AddressList addresses_;
142 bool canceled_; 147 bool canceled_;
143 148
144 // The time the Connect() method was called (if it got called). 149 // The time the Connect() method was called (if it got called).
145 base::Time connect_start_time_; 150 base::Time connect_start_time_;
146 151
147 DISALLOW_COPY_AND_ASSIGN(ConnectingSocket); 152 DISALLOW_COPY_AND_ASSIGN(ConnectingSocket);
148 }; 153 };
149 154
150 virtual ~TCPClientSocketPool(); 155 virtual ~TCPClientSocketPool();
(...skipping 27 matching lines...) Expand all
178 // Timer used to periodically prune idle sockets that timed out or can't be 183 // Timer used to periodically prune idle sockets that timed out or can't be
179 // reused. 184 // reused.
180 base::RepeatingTimer<TCPClientSocketPool> timer_; 185 base::RepeatingTimer<TCPClientSocketPool> timer_;
181 186
182 // The total number of idle sockets in the system. 187 // The total number of idle sockets in the system.
183 int idle_socket_count_; 188 int idle_socket_count_;
184 189
185 // The maximum number of sockets kept per group. 190 // The maximum number of sockets kept per group.
186 const int max_sockets_per_group_; 191 const int max_sockets_per_group_;
187 192
193 // The host resolver that will be used to do DNS lookups for connecting
194 // sockets.
195 HostResolver* host_resolver_;
196
188 DISALLOW_COPY_AND_ASSIGN(TCPClientSocketPool); 197 DISALLOW_COPY_AND_ASSIGN(TCPClientSocketPool);
189 }; 198 };
190 199
191 } // namespace net 200 } // namespace net
192 201
193 #endif // NET_BASE_TCP_CLIENT_SOCKET_POOL_H_ 202 #endif // NET_BASE_TCP_CLIENT_SOCKET_POOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698