** Copyright (C) 2001-2025 Zabbix SIA
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
type addressPool struct {
// NewAddressPool creates address pool implementing AddressSet interface.
func NewAddressPool(addrs []string) AddressSet {
pool: make([]address, 0, len(addrs)),
for _, s := range addrs {
a.pool = append(a.pool, address{addr: s})
// String returns list of all addresses.
func (a *addressPool) String() string {
for _, addr := range a.pool {
sb.WriteString(addr.addr)
// Get returns current address as string <address>:<port>.
func (a *addressPool) Get() string {
func (a *addressPool) nextAddress() {
a.pool = append(a.pool, a.pool[0])
a.pool = append(a.pool[:0], a.pool[1:]...)
// Next cycles the address set by selecting next address.
func (a *addressPool) Next() {
func (a *addressPool) reset() {
if 0 == a.pool[0].revision {