| 571 | } |
| 572 | |
| 573 | connect_pool* connect_manager::peek() |
| 574 | { |
| 575 | connect_pool* pool; |
| 576 | size_t service_size, n; |
| 577 | |
| 578 | unsigned long id = get_id(); |
| 579 | lock_guard guard(lock_); |
| 580 | |
| 581 | if (addrs_.empty()) { |
| 582 | logger_warn("pools's size is 0!"); |
| 583 | return NULL; |
| 584 | } |
| 585 | |
| 586 | conns_pools& pools = get_pools_by_id(id); |
| 587 | service_size = pools.pools.size(); |
| 588 | // �����ǰ���ӳض���δ��ʼ������Ϊ�䴴���������ӳ� |
| 589 | if (service_size == 0) { |
| 590 | create_pools_for(pools.pools); |
| 591 | service_size = pools.pools.size(); |
| 592 | assert(service_size > 0); |
| 593 | } |
| 594 | |
| 595 | // �������е����ӳأ��ҳ�һ�����õ����ӳ� |
| 596 | for(size_t i = 0; i < service_size; i++) { |
| 597 | n = pools.conns_next++ % service_size; |
| 598 | pool = pools.pools[n]; |
| 599 | if (pool->aliving()) { |
| 600 | return pool; |
| 601 | } |
| 602 | } |
| 603 | |
| 604 | logger_error("all pool(size=%d) is dead!", (int) service_size); |
| 605 | return NULL; |
| 606 | } |
| 607 | |
| 608 | connect_pool* connect_manager::peek(const char* addr, |
| 609 | bool exclusive /* = true */) |