Introduce FEATURE_PREFER_IPV4_ADDRESS. If selected, we have:

function                                             old     new   delta
str2sockaddr                                         328     344     +16
This commit is contained in:
Denis Vlasenko 2007-11-14 10:18:33 +00:00
parent 8d0a734d91
commit 9d6c46955f
2 changed files with 31 additions and 3 deletions

View File

@ -125,6 +125,7 @@ USE_FEATURE_IPV6(sa_family_t af,)
int rc; int rc;
len_and_sockaddr *r = NULL; len_and_sockaddr *r = NULL;
struct addrinfo *result = NULL; struct addrinfo *result = NULL;
struct addrinfo *used_res;
const char *org_host = host; /* only for error msg */ const char *org_host = host; /* only for error msg */
const char *cp; const char *cp;
struct addrinfo hint; struct addrinfo hint;
@ -169,9 +170,21 @@ USE_FEATURE_IPV6(sa_family_t af,)
xfunc_die(); xfunc_die();
goto ret; goto ret;
} }
r = xmalloc(offsetof(len_and_sockaddr, sa) + result->ai_addrlen); used_res = result;
r->len = result->ai_addrlen; #if ENABLE_FEATURE_PREFER_IPV4_ADDRESS
memcpy(&r->sa, result->ai_addr, result->ai_addrlen); while (1) {
if (used_res->ai_family == AF_INET)
break;
used_res = used_res->ai_next;
if (!used_res) {
used_res = result;
break;
}
}
#endif
r = xmalloc(offsetof(len_and_sockaddr, sa) + used_res->ai_addrlen);
r->len = used_res->ai_addrlen;
memcpy(&r->sa, used_res->ai_addr, used_res->ai_addrlen);
set_nport(r, htons(port)); set_nport(r, htons(port));
ret: ret:
freeaddrinfo(result); freeaddrinfo(result);

View File

@ -12,6 +12,21 @@ config FEATURE_IPV6
Enable IPv6 support in busybox. Enable IPv6 support in busybox.
This adds IPv6 support in the networking applets. This adds IPv6 support in the networking applets.
config FEATURE_PREFER_IPV4_ADDRESS
bool "Preferentially use IPv4 addresses from DNS queries"
default y
depends on FEATURE_IPV6
help
Use IPv4 address of network host if it has one.
If this option is off, the first returned address will be used.
This may cause problems when your DNS server is IPv6-capable and
is returning IPv6 host addresses too. If IPv6 address
precedes IPv4 one in DNS reply, busybox network applets
(e.g. wget) will use IPv6 address. On an IPv6-incapable host
or network applets will fail to connect to the host
using IPv6 address.
config VERBOSE_RESOLUTION_ERRORS config VERBOSE_RESOLUTION_ERRORS
bool "Verbose resolution errors" bool "Verbose resolution errors"
default n default n