From a0bae929eac3b542f533f17871060d135fcb3bdd Mon Sep 17 00:00:00 2001 From: hniksic Date: Thu, 13 Nov 2003 08:41:17 -0800 Subject: [PATCH] [svn] Turn on opt.ipv4_only if we're compiling with IPv6, and AI_ADDRINFO is not available, and AF_INET6 sockets can't be created. --- src/ChangeLog | 6 ++++++ src/init.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 028c0e86..49670ff5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2003-11-13 Hrvoje Niksic + + * init.c (defaults): Turn on opt.ipv4_only if we're compiling with + IPv6, and AI_ADDRINFO is not available, and AF_INET6 sockets can't + be created. + 2003-11-13 Hrvoje Niksic * host.c (lookup_host): Document the fact that the addresses are diff --git a/src/init.c b/src/init.c index 182c0648..74e49cc1 100644 --- a/src/init.c +++ b/src/init.c @@ -304,6 +304,29 @@ defaults (void) opt.restrict_files_os = restrict_windows; #endif opt.restrict_files_ctrl = 1; + +#ifdef ENABLE_IPV6 +# ifndef HAVE_GETADDRINFO_AI_ADDRCONFIG + /* If IPv6 is enabled, but AI_ADDRCONFIG is missing, check whether + we can create AF_INET6 sockets. If we can't, turn on the + --inet4-only setting. This is necessary because on some systems + (e.g. RHL 9) getaddrinfo resolves AAAA records, but socket() + can't even create an AF_INET6 socket, let alone connect to IPv6 + hosts. To avoid "address family not supported" error messages, + we set ipv4_only. + + We do it as early as here, so that the user can revert the + settingn using --no-inet4-only, in case he wants to see the error + messages, for whatever reason. */ + { + int sock = socket (AF_INET6, SOCK_STREAM, 0); + if (sock < 0) + opt.ipv4_only = 1; + else + close (sock); + } +# endif /* not HAVE_GETADDRINFO_AI_ADDRCONFIG */ +#endif /* ENABLE_IPV6 */ } /* Return the user's home directory (strdup-ed), or NULL if none is -- 2.39.2