SetServers changes a ServerList's set of servers at runtime and is safe for concurrent use by multiple goroutines. Each server is given equal weight. A server is given more weight if it's listed multiple times. SetServers returns an error if any of the server names fail to resolve. No attempt is m
(servers ...string)
| 66 | // resolve. No attempt is made to connect to the server. If any error |
| 67 | // is returned, no changes are made to the ServerList. |
| 68 | func (ss *ServerList) SetServers(servers ...string) error { |
| 69 | naddr := make([]net.Addr, len(servers)) |
| 70 | for i, server := range servers { |
| 71 | if strings.Contains(server, "/") { |
| 72 | addr, err := net.ResolveUnixAddr("unix", server) |
| 73 | if err != nil { |
| 74 | return err |
| 75 | } |
| 76 | naddr[i] = newStaticAddr(addr) |
| 77 | } else { |
| 78 | tcpaddr, err := net.ResolveTCPAddr("tcp", server) |
| 79 | if err != nil { |
| 80 | return err |
| 81 | } |
| 82 | naddr[i] = newStaticAddr(tcpaddr) |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | ss.mu.Lock() |
| 87 | defer ss.mu.Unlock() |
| 88 | ss.addrs = naddr |
| 89 | return nil |
| 90 | } |
| 91 | |
| 92 | // Each iterates over each server calling the given function |
| 93 | func (ss *ServerList) Each(f func(net.Addr) error) error { |