mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
Add DNS_ERR_NODATA error code to handle empty replies.
This commit is contained in:
parent
2b6eae5999
commit
94fba5b9ac
7
evdns.c
7
evdns.c
@ -843,13 +843,17 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply)
|
||||
/* there was an error */
|
||||
if (flags & 0x0200) {
|
||||
error = DNS_ERR_TRUNCATED;
|
||||
} else {
|
||||
} else if (flags & 0x000f) {
|
||||
u16 error_code = (flags & 0x000f) - 1;
|
||||
if (error_code > 4) {
|
||||
error = DNS_ERR_UNKNOWN;
|
||||
} else {
|
||||
error = error_codes[error_code];
|
||||
}
|
||||
} else if (reply && !reply->have_answer) {
|
||||
error = DNS_ERR_NODATA;
|
||||
} else {
|
||||
error = DNS_ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
switch (error) {
|
||||
@ -3871,6 +3875,7 @@ evdns_err_to_string(int err)
|
||||
case DNS_ERR_TIMEOUT: return "request timed out";
|
||||
case DNS_ERR_SHUTDOWN: return "dns subsystem shut down";
|
||||
case DNS_ERR_CANCEL: return "dns request canceled";
|
||||
case DNS_ERR_NODATA: return "no records in the reply";
|
||||
default: return "[Unknown error code]";
|
||||
}
|
||||
}
|
||||
|
@ -166,6 +166,10 @@ extern "C" {
|
||||
#define DNS_ERR_SHUTDOWN 68
|
||||
/** The request was canceled via a call to evdns_cancel_request */
|
||||
#define DNS_ERR_CANCEL 69
|
||||
/** There were no answers and no error condition in the DNS packet.
|
||||
* This can happen when you ask for an address that exists, but a record
|
||||
* type that doesn't. */
|
||||
#define DNS_ERR_NODATA 70
|
||||
|
||||
#define DNS_IPv4_A 1
|
||||
#define DNS_PTR 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user