return names;
}
+static inline const char *ares_errno_string(int errorno) {
+#define ERRNO_CASE(e) case ARES_##e: return #e;
+ switch (errorno) {
+ ERRNO_CASE(SUCCESS)
+ ERRNO_CASE(ENODATA)
+ ERRNO_CASE(EFORMERR)
+ ERRNO_CASE(ESERVFAIL)
+ ERRNO_CASE(ENOTFOUND)
+ ERRNO_CASE(ENOTIMP)
+ ERRNO_CASE(EREFUSED)
+ ERRNO_CASE(EBADQUERY)
+ ERRNO_CASE(EBADNAME)
+ ERRNO_CASE(EBADFAMILY)
+ ERRNO_CASE(EBADRESP)
+ ERRNO_CASE(ECONNREFUSED)
+ ERRNO_CASE(ETIMEOUT)
+ ERRNO_CASE(EOF)
+ ERRNO_CASE(EFILE)
+ ERRNO_CASE(ENOMEM)
+ ERRNO_CASE(EDESTRUCTION)
+ ERRNO_CASE(EBADSTR)
+ ERRNO_CASE(EBADFLAGS)
+ ERRNO_CASE(ENONAME)
+ ERRNO_CASE(EBADHINTS)
+ ERRNO_CASE(ENOTINITIALIZED)
+ ERRNO_CASE(ELOADIPHLPAPI)
+ ERRNO_CASE(EADDRGETNETWORKPARAMS)
+ ERRNO_CASE(ECANCELLED)
+ default:
+ assert(0 && "Unhandled c-ares errno");
+ return "(UNKNOWN)";
+ }
+}
+
static void ResolveError(Persistent<Function> &cb, int status) {
HandleScope scope;
- Local<Value> e = ErrnoException(status, NULL, ares_strerror(status));
+ Local<String> code = String::NewSymbol(ares_errno_string(status));
+ Local<String> message = String::NewSymbol(ares_strerror(status));
+
+ Local<String> cons1 = String::Concat(code, String::NewSymbol(", "));
+ Local<String> cons2 = String::Concat(cons1, message);
+
+ Local<Value> e = Exception::Error(cons2);
+
+ Local<Object> obj = e->ToObject();
+ obj->Set(String::NewSymbol("errno"), Integer::New(status));
TryCatch try_catch;