On Thu, Jan 31, 2013 at 10:38 PM, Steve Freegard
<[email protected]> wrote:
> Hi Ben,
>
>
> On Thursday, 31 January 2013 19:10:21 UTC, Ben Noordhuis wrote:
>>
>>
>> Not sure, it seems to work for me:
>>
>>   $ out/Release/node tmp/dns-econn.js
>>   { [Error: queryA ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND',
>> syscall: 'queryA' }
>>
>> The error code is ENOTFOUND for backwards compatibility but
>> essentially means NXDOMAIN (which is what dig returns for that
>> domain).
>>
>> Maybe run strace on the script to see what it's doing.
>
>
>
> Can you try again with that hostname (servfail.test.snert.net) as this was
> only returning SERVFAIL for my IP at the time, we've since managed to break
> it properly for everyone ;-)
>
> strace shows that packets are responded to and being as this is UDP -
> there's no connections being refused or any truncated data causing a TCP
> lookup:
>
>      0.000218 connect(7, {sa_family=AF_INET, sin_port=htons(53),
> sin_addr=inet_addr("127.0.0.1")}, 16) = 0
>      0.000222 send(7,
> "Nx\1\0\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 41,
> MSG_NOSIGNAL) = 41
>      0.000416 futex(0xb770046c, FUTEX_WAKE_PRIVATE, 1) = 1
>      0.000264 epoll_ctl(3, EPOLL_CTL_ADD, 4, {EPOLLIN, {u32=4,
> u64=4294967300}}) = 0
>      0.000147 epoll_ctl(3, EPOLL_CTL_ADD, 5, {EPOLLIN, {u32=5,
> u64=4294967301}}) = 0
>      0.000141 epoll_ctl(3, EPOLL_CTL_ADD, 7, {EPOLLIN, {u32=7,
> u64=4294967303}}) = 0
>      0.000168 epoll_wait(3, {{EPOLLIN, {u32=7, u64=4294967303}}}, 64, 0) = 1
>      0.000207 clock_gettime(CLOCK_MONOTONIC, {18616500, 71519938}) = 0
>      0.000183 recvfrom(7,
> "Nx\201\202\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 513, 0,
> {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")},
> [16]) = 41
>      0.000466 send(7,
> "Nx\1\0\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 41,
> MSG_NOSIGNAL) = 41
>      0.000445 recvfrom(7,
> "Nx\201\202\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 513, 0,
> {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")},
> [16]) = 41
>      0.000506 send(7,
> "Nx\1\0\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 41,
> MSG_NOSIGNAL) = 41
>      0.000860 recvfrom(7, 0xbf837b9f, 513, 0, 0xbf837da0, 0xbf837dbc) = -1
> EAGAIN (Resource temporarily unavailable)
>      0.000129 clock_gettime(CLOCK_MONOTONIC, {18616500, 74108425}) = 0
>      0.000133 epoll_wait(3, {{EPOLLIN, {u32=7, u64=4294967303}}}, 64, 953) =
> 1
>      0.107171 clock_gettime(CLOCK_MONOTONIC, {18616500, 181412884}) = 0
>      0.000165 recvfrom(7,
> "Nx\201\202\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 513, 0,
> {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")},
> [16]) = 41
>      0.000449 send(7,
> "Nx\1\0\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 41,
> MSG_NOSIGNAL) = 41
>      0.000431 recvfrom(7,
> "Nx\201\202\0\1\0\0\0\0\0\0\10servfail\4test\5snert\3net\0\0\1\0\1", 513, 0,
> {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")},
> [16]) = 41
>      0.000532 futex(0xb770046c, FUTEX_WAKE_PRIVATE, 1) = 1
>      0.001138 ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig
> icanon echo ...}) = 0
>      0.001087 futex(0xb770046c, FUTEX_WAKE_PRIVATE, 1) = 1
>      0.000390 ioctl(1, TIOCGWINSZ, {ws_row=32, ws_col=132, ws_xpixel=0,
> ws_ypixel=0}) = 0
>      0.000336 rt_sigaction(SIGWINCH, {0x82003a0, ~[RTMIN RT_1], SA_RESTART},
> NULL, 8) = 0
>      0.000515 futex(0xb770046c, FUTEX_WAKE_PRIVATE, 1) = 1
>      0.001139 futex(0xb770046c, FUTEX_WAKE_PRIVATE, 1) = 1
>      0.000914 write(1, "{ [Error: queryA ECONNREFUSED]\n  code:
> 'ECONNREFUSED',\n  errno: 'ECONNREFUSED',\n  syscall: 'queryA' }\n", 102{
> [Error: queryA ECONNREFUSED]
>   code: 'ECONNREFUSED',
>   errno: 'ECONNREFUSED',
>   syscall: 'queryA' }
> ) = 102
>
>
> Regards,
> Steve.

Right, I can reproduce it now.

It seems to be a c-ares quirk (the DNS resolver library we use).  If a
server replies with SERVFAIL, c-ares retries the query up to four
times, then gives up with an ARES_ECONNREFUSED error.

I don't think there is much we can do about that.  Maybe you can bring
it up on the c-ares mailing list.

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to