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 // A ClientSocketPoolBase is used to restrict the number of sockets open at | 5 // A ClientSocketPoolBase is used to restrict the number of sockets open at |
6 // a time. It also maintains a list of idle persistent sockets for reuse. | 6 // a time. It also maintains a list of idle persistent sockets for reuse. |
7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle | 7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle |
8 // the core logic of (1) restricting the number of active (connected or | 8 // the core logic of (1) restricting the number of active (connected or |
9 // connecting) sockets per "group" (generally speaking, the hostname), (2) | 9 // connecting) sockets per "group" (generally speaking, the hostname), (2) |
10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3) | 10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3) |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 void ReleaseSocket(const std::string& group_name, | 281 void ReleaseSocket(const std::string& group_name, |
282 std::unique_ptr<StreamSocket> socket, | 282 std::unique_ptr<StreamSocket> socket, |
283 int id); | 283 int id); |
284 | 284 |
285 // See ClientSocketPool::FlushWithError for documentation on this function. | 285 // See ClientSocketPool::FlushWithError for documentation on this function. |
286 void FlushWithError(int error); | 286 void FlushWithError(int error); |
287 | 287 |
288 // See ClientSocketPool::CloseIdleSockets for documentation on this function. | 288 // See ClientSocketPool::CloseIdleSockets for documentation on this function. |
289 void CloseIdleSockets(); | 289 void CloseIdleSockets(); |
290 | 290 |
| 291 // See ClientSocketPool::CloseIdleSocketsInGroup for documentation. |
| 292 void CloseIdleSocketsInGroup(const std::string& group_name); |
| 293 |
291 // See ClientSocketPool::IdleSocketCount() for documentation on this function. | 294 // See ClientSocketPool::IdleSocketCount() for documentation on this function. |
292 int idle_socket_count() const { | 295 int idle_socket_count() const { |
293 return idle_socket_count_; | 296 return idle_socket_count_; |
294 } | 297 } |
295 | 298 |
296 // See ClientSocketPool::IdleSocketCountInGroup() for documentation on this | 299 // See ClientSocketPool::IdleSocketCountInGroup() for documentation on this |
297 // function. | 300 // function. |
298 int IdleSocketCountInGroup(const std::string& group_name) const; | 301 int IdleSocketCountInGroup(const std::string& group_name) const; |
299 | 302 |
300 // See ClientSocketPool::GetLoadState() for documentation on this function. | 303 // See ClientSocketPool::GetLoadState() for documentation on this function. |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 CallbackResultPair(const CallbackResultPair& other); | 523 CallbackResultPair(const CallbackResultPair& other); |
521 ~CallbackResultPair(); | 524 ~CallbackResultPair(); |
522 | 525 |
523 CompletionCallback callback; | 526 CompletionCallback callback; |
524 int result; | 527 int result; |
525 }; | 528 }; |
526 | 529 |
527 typedef std::map<const ClientSocketHandle*, CallbackResultPair> | 530 typedef std::map<const ClientSocketHandle*, CallbackResultPair> |
528 PendingCallbackMap; | 531 PendingCallbackMap; |
529 | 532 |
| 533 // Closes all idle sockets in |group| if |force| is true. Else, only closes |
| 534 // idle sockets in |group| that timed out with respect to |now| or can't be |
| 535 // reused. |
| 536 void CleanupIdleSocketsInGroup(bool force, |
| 537 Group* group, |
| 538 const base::TimeTicks& now); |
| 539 |
530 Group* GetOrCreateGroup(const std::string& group_name); | 540 Group* GetOrCreateGroup(const std::string& group_name); |
531 void RemoveGroup(const std::string& group_name); | 541 void RemoveGroup(const std::string& group_name); |
532 void RemoveGroup(GroupMap::iterator it); | 542 void RemoveGroup(GroupMap::iterator it); |
533 | 543 |
534 // Called when the number of idle sockets changes. | 544 // Called when the number of idle sockets changes. |
535 void IncrementIdleCount(); | 545 void IncrementIdleCount(); |
536 void DecrementIdleCount(); | 546 void DecrementIdleCount(); |
537 | 547 |
538 // Scans the group map for groups which have an available socket slot and | 548 // Scans the group map for groups which have an available socket slot and |
539 // at least one pending request. Returns true if any groups are stalled, and | 549 // at least one pending request. Returns true if any groups are stalled, and |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 int id) { | 793 int id) { |
784 return helper_.ReleaseSocket(group_name, std::move(socket), id); | 794 return helper_.ReleaseSocket(group_name, std::move(socket), id); |
785 } | 795 } |
786 | 796 |
787 void FlushWithError(int error) { helper_.FlushWithError(error); } | 797 void FlushWithError(int error) { helper_.FlushWithError(error); } |
788 | 798 |
789 bool IsStalled() const { return helper_.IsStalled(); } | 799 bool IsStalled() const { return helper_.IsStalled(); } |
790 | 800 |
791 void CloseIdleSockets() { return helper_.CloseIdleSockets(); } | 801 void CloseIdleSockets() { return helper_.CloseIdleSockets(); } |
792 | 802 |
| 803 void CloseIdleSocketsInGroup(const std::string& group_name) { |
| 804 return helper_.CloseIdleSocketsInGroup(group_name); |
| 805 } |
| 806 |
793 int idle_socket_count() const { return helper_.idle_socket_count(); } | 807 int idle_socket_count() const { return helper_.idle_socket_count(); } |
794 | 808 |
795 int IdleSocketCountInGroup(const std::string& group_name) const { | 809 int IdleSocketCountInGroup(const std::string& group_name) const { |
796 return helper_.IdleSocketCountInGroup(group_name); | 810 return helper_.IdleSocketCountInGroup(group_name); |
797 } | 811 } |
798 | 812 |
799 LoadState GetLoadState(const std::string& group_name, | 813 LoadState GetLoadState(const std::string& group_name, |
800 const ClientSocketHandle* handle) const { | 814 const ClientSocketHandle* handle) const { |
801 return helper_.GetLoadState(group_name, handle); | 815 return helper_.GetLoadState(group_name, handle); |
802 } | 816 } |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 }; | 895 }; |
882 | 896 |
883 internal::ClientSocketPoolBaseHelper helper_; | 897 internal::ClientSocketPoolBaseHelper helper_; |
884 | 898 |
885 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase); | 899 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase); |
886 }; | 900 }; |
887 | 901 |
888 } // namespace net | 902 } // namespace net |
889 | 903 |
890 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_ | 904 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_ |
OLD | NEW |