net: do not set V4MAPPED on FreeBSD

V4MAPPED is not supported on recent FreeBSD versions, at least on 10.1.
Thus, do not set this flag in net.connect on FreeBSD.

Fixes: https://github.com/joyent/node/issues/8540
Fixes: https://github.com/joyent/node/issues/9204
PR-URL: https://github.com/joyent/node/pull/18204
PR-URL: https://github.com/iojs/io.js/pull/1555
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
Julien Gilli 2015-03-02 15:50:25 -08:00 committed by Rod Vagg
parent df1994fe53
commit 9bc2e26720
2 changed files with 13 additions and 4 deletions

View File

@ -267,8 +267,9 @@ The following flags can be passed as hints to `dns.lookup`.
of addresses supported by the current system. For example, IPv4 addresses of addresses supported by the current system. For example, IPv4 addresses
are only returned if the current system has at least one IPv4 address are only returned if the current system has at least one IPv4 address
configured. Loopback addresses are not considered. configured. Loopback addresses are not considered.
- `dns.V4MAPPED`: If the IPv6 family was specified, but no IPv6 addresses - `dns.V4MAPPED`: If the IPv6 family was specified, but no IPv6 addresses were
were found, then return IPv4 mapped IPv6 addresses. found, then return IPv4 mapped IPv6 addresses. Note that it is not supported
on some operating systems (e.g FreeBSD 10.1).
## Implementation considerations ## Implementation considerations

View File

@ -941,8 +941,16 @@ function lookupAndConnect(self, options) {
hints: 0 hints: 0
}; };
if (dnsopts.family !== 4 && dnsopts.family !== 6) if (dnsopts.family !== 4 && dnsopts.family !== 6) {
dnsopts.hints = dns.ADDRCONFIG | dns.V4MAPPED; dnsopts.hints = dns.ADDRCONFIG;
// The AI_V4MAPPED hint is not supported on FreeBSD, and getaddrinfo
// returns EAI_BADFLAGS. However, it seems to be supported on most other
// systems. See
// http://lists.freebsd.org/pipermail/freebsd-bugs/2008-February/028260.html
// for more information on the lack of support for FreeBSD.
if (process.platform !== 'freebsd')
dnsopts.hints |= dns.V4MAPPED;
}
debug('connect: find host ' + host); debug('connect: find host ' + host);
debug('connect: dns options', dnsopts); debug('connect: dns options', dnsopts);