@@ -336,25 +336,17 @@ class QueryWrap : public AsyncWrap {
336336 delete wrap;
337337 }
338338
339- void CallOnComplete (Local<Value> answer) {
340- HandleScope handle_scope (env ()->isolate ());
341- Context::Scope context_scope (env ()->context ());
342- Local<Value> argv[] = {
343- Integer::New (env ()->isolate (), 0 ),
344- answer
345- };
346- MakeCallback (env ()->oncomplete_string (), arraysize (argv), argv);
347- }
348-
349- void CallOnComplete (Local<Value> answer, Local<Value> family) {
339+ void CallOnComplete (Local<Value> answer,
340+ Local<Value> extra = Local<Value>()) {
350341 HandleScope handle_scope (env ()->isolate ());
351342 Context::Scope context_scope (env ()->context ());
352343 Local<Value> argv[] = {
353344 Integer::New (env ()->isolate (), 0 ),
354345 answer,
355- family
346+ extra
356347 };
357- MakeCallback (env ()->oncomplete_string (), arraysize (argv), argv);
348+ const int argc = arraysize (argv) - extra.IsEmpty ();
349+ MakeCallback (env ()->oncomplete_string (), argc, argv);
358350 }
359351
360352 void ParseError (int status) {
@@ -400,18 +392,27 @@ class QueryAWrap: public QueryWrap {
400392 HandleScope handle_scope (env ()->isolate ());
401393 Context::Scope context_scope (env ()->context ());
402394
403- struct hostent * host;
395+ hostent* host;
396+ ares_addrttl addrttls[256 ];
397+ int naddrttls = arraysize (addrttls);
404398
405- int status = ares_parse_a_reply (buf, len, &host, nullptr , nullptr );
399+ int status = ares_parse_a_reply (buf, len, &host, addrttls, &naddrttls );
406400 if (status != ARES_SUCCESS) {
407401 ParseError (status);
408402 return ;
409403 }
410404
411405 Local<Array> addresses = HostentToAddresses (env (), host);
406+ Local<Array> ttls = Array::New (env ()->isolate (), naddrttls);
407+
408+ auto context = env ()->context ();
409+ for (int i = 0 ; i < naddrttls; i += 1 ) {
410+ auto value = Integer::New (env ()->isolate (), addrttls[i].ttl );
411+ ttls->Set (context, i, value).FromJust ();
412+ }
412413 ares_free_hostent (host);
413414
414- this -> CallOnComplete (addresses);
415+ CallOnComplete (addresses, ttls );
415416 }
416417};
417418
0 commit comments