code: func (r *IPHash) Select(pool HostPool, request *http.Request) *UpstreamHost {
  	poolLen := uint32(len(pool))
  	clientIP, _, err := net.SplitHostPort(request.RemoteAddr)
  	if err != nil {
  		clientIP = request.RemoteAddr
  	}
  	index := hash(clientIP) % poolLen
  	for i := uint32(0); i < poolLen; i++ {
  		index += i
  		host := pool[index%poolLen]
  		if host.Available() {
  			return host
  		}
  	}
  	return nil
  }
docs: // Select selects an up host from the pool using a round robin ordering scheme.