public Map getVersions() throws TimeoutException {
		Map<InetSocketAddress, String> map = new HashMap<InetSocketAddress, String>();

		PooledBlockingClient pbc[] = blockingClientPool.getOneBlockingClientForAllActiveHosts();
		if (pbc == null) {
			throw new TimeoutException("we do not have any client array [pbc] to connect to server!");
		}

		String version = null;
		for (int i = 0; i < pbc.length; i++) {
			try {
				BlockingClient bc = pbc[i].getBlockingClient();
				if (bc == null) {
					throw new TimeoutException("we do not have any client[bc] to connect to server!");
				}

				version = getVersion(bc);

				map.put(pbc[i].getSocketBasedHost().getInetSocketAddress(), version);
			} catch (IOException e) {
				if (pbc != null) {
					logger.log(Level.WARNING, "We had an ioerror will close client! " + e, e);
					pbc[i].close();
				}
			} catch (TimeoutException e) {
				if (pbc != null) {
					logger.log(Level.WARNING, "We had an timeout will close client! " + e, e);
					pbc[i].close();
				}
			} finally {
				blockingClientPool.returnBlockingClient(pbc[i]);
				pbc[i] = null;
			}
		}

		return map;
	}