public Operation sendUnconnectedOperation(final Operation operation) throws ConnectionException, TimeoutException {
		try {
			if (OperationType.isADisconnectedOperation(operation.getOperationType())) {
				createSocket();
				MessageUtils.sendOperation(sock, operation);
				int retry = 0;
				Operation response;
				sock.setSoTimeout(30000);
				do {
					response = MessageUtils.getOperation(sock);
					if (response.getOperationType().equals(operation.getOperationType())) {
						return response;
					}
					retry ++;
					LOG.warn("Received " + response.getOperationType().toString() + " instead of " +
					operation.getOperationType() + "! Retrying to get the operation." );
				} while (!response.getOperationType().equals(operation.getOperationType())
						|| retry <= 10);
			}
		} catch (SocketTimeoutException s) {
			LOG.error("Server didn't answer in time...");
			throw new TimeoutException(s.getMessage());
		} catch (IOException e) {
			LOG.error("Operation " + operation.getOperationType().toString() + " has failed!");
			throw new ConnectionException(e.getMessage());
		} finally {
			//remove timeout option
			try {
				if (sock != null && !sock.isClosed()) {
					sock.setSoTimeout(0);
				}
			} catch (SocketException e) {}
		}
		return null;
	}