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
- Check server-side logs for the real reason the info response was empty.
- Confirm client and server versions match and the protocol is supported.
- Restart the BSim server and retry.
- 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
- Keep client and server versions in sync to avoid empty/malformed info responses.
- Monitor server health; restart if the backend enters an inconsistent state.
- Capture server-side logs when this catch-all fires to find the real cause.
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
- {}
- Unable to connect to server
- connection.getResponseMessage()
- Error sending request: {message}
- Usage: ghidra trace connect ADDRESS
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/262e04ac9bb22a13.
Report an issue: GitHub.