code: func (pool *serverPool) checkDial() {
  	fillWithKnownSelects := !pool.fastDiscover
  	for pool.knownSelected < targetKnownSelect {
  		entry := pool.knownSelect.choose()
  		if entry == nil {
  			fillWithKnownSelects = false
  			break
  		}
  		pool.dial((*poolEntry)(entry.(*knownEntry)), true)
  	}
  	for pool.knownSelected+pool.newSelected < targetServerCount {
  		entry := pool.newSelect.choose()
  		if entry == nil {
  			break
  		}
  		pool.dial((*poolEntry)(entry.(*discoveredEntry)), false)
  	}
  	if fillWithKnownSelects {
  		// no more newly discovered nodes to select and since fast discover period
  		// is over, we probably won't find more in the near future so select more
  		// known entries if possible
  		for pool.knownSelected < targetServerCount {
  			entry := pool.knownSelect.choose()
  			if entry == nil {
  				break
  			}
  			pool.dial((*poolEntry)(entry.(*knownEntry)), true)
  		}
  	}
  }
docs: // checkDial checks if new dials can/should be made. It tries to select servers both
  // based on good statistics and recent discovery.