Error handling
As you saw in previous sections the DnsClient allows you to pass in a Handler which will be notified with an
AsyncResult once the query was complete. In case of an error it will be notified with a DnsException which will
hole a DnsResponseCode
that indicate why the resolution failed. This DnsResponseCode
can be used to inspect the cause in more detail.
Possible DnsResponseCodes are:
-
NOERROR
No record was found for a given query -
FORMERROR
Format error -
SERVFAIL
Server failure -
NXDOMAIN
Name error -
NOTIMPL
Not implemented by DNS Server -
REFUSED
DNS Server refused the query -
YXDOMAIN
Domain name should not exist -
YXRRSET
Resource record should not exist -
NXRRSET
RRSET does not exist -
NOTZONE
Name not in zone -
BADVERS
Bad extension mechanism for version -
BADSIG
Bad signature -
BADKEY
Bad key -
BADTIME
Bad timestamp
All of those errors are "generated" by the DNS Server itself.
You can obtain the DnsResponseCode
from the DnsException
like:
def client = vertx.createDnsClient(53, "8.8.8.8");
client.lookup("missing.vertx.io", { ar ->
if (ar.succeeded()) {
def record = ar.result();
println "record: " + record;
} else {
def cause = ar.cause();
if (cause instanceof DnsException) {
def code = cause.code();
println "Code : " + code
// ...
} else {
println("Failed to resolve entry" + ar.cause());
}
}
})