NationalSecurityAgency/ghidra · error · IOException

Unknown error connection to: {}

Error message

Unknown error connection to: {}

What it means

Thrown in establishQueryServerConnection as the final fallback when getInfo() returns null but there is no usable error (no lastError, or its category is not Nodatabase). It signals the connection reached a state where the client cannot report a specific cause, so BulkSignatures reports the target server info verbatim. This is a catch-all for unexpected/unexplained connection failures.

Source

Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java:126

		if (querydb != null) {
			return querydb.getInfo();
		}

		checkBSimServerOperation();

		querydb = BSimClientFactory.buildClient(bsimServerInfo, async);

		if (!querydb.initialize()) {
			throw new IOException(querydb.getLastError().message);
		}

		DatabaseInformation info = querydb.getInfo();
		if (info == null) {
			BSimError lastError = querydb.getLastError();
			if (lastError != null && lastError.category == ErrorCategory.Nodatabase) {
				throw new IOException(lastError.message);
			}
			throw new IOException("Unknown error connection to: " + bsimServerInfo.toString());
		}

		Msg.debug(this, "Connected to " + info.databasename);
		return info;
	}

	/**
	 * This will be automatically invoked when BulkSignatures is out of scope, if using
	 * try-with-resources to create it. When this happens we need to clean up the 
	 * connection.
	 */
	@Override
	public void close() {
		closeConnection();
	}

	/**
	 * Closes the current database connection.

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Check server-side logs for the real reason the info response was empty.
  2. Confirm client and server versions match and the protocol is supported.
  3. Restart the BSim server and retry.
  4. If reproducible, gather a protocol trace and report it as a server-side issue.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    bsim.prewarm();
} catch (IOException e) {
    if (e.getMessage().startsWith("Unknown error connection to:")) {
        // no specific cause; gather server logs and report
    } else { throw e; }
}

Prevention

When it happens

Trigger: Server accepted the connection but returned no DatabaseInformation and no categorizable error; a malformed or empty response; partial protocol deserialization failure where getInfo() is null without a set BSimError.

Common situations: Server-side bug returning an empty response; version skew where the server omits expected fields; network interruption mid-handshake; backend (H2/PostgreSQL/Elastic) in an inconsistent state.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/262e04ac9bb22a13. Report an issue: GitHub.