Changelog for the c-ares project
+* September 18
+
+- Added constants that will be used by ares_getaddrinfo
+
+- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
+ available to ensure it works properly in a threaded environment.
+
* September 10
- configure fix for detecting a member in the sockaddr_in6 struct which failed
-dnl Check for how to set a socket to non-blocking state. There seems to exist\r
-dnl four known different ways, with the one used almost everywhere being POSIX\r
-dnl and XPG3, while the other different ways for different systems (old BSD,\r
-dnl Windows and Amiga).\r
-dnl\r
-dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the\r
-dnl O_NONBLOCK define is found but does not work. This condition is attempted\r
-dnl to get caught in this script by using an excessive number of #ifdefs...\r
-dnl\r
-AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],\r
-[\r
- AC_MSG_CHECKING([non-blocking sockets style])\r
-\r
- AC_TRY_COMPILE([\r
-/* headers for O_NONBLOCK test */\r
-#include <sys/types.h>\r
-#include <unistd.h>\r
-#include <fcntl.h>\r
-],[\r
-/* try to compile O_NONBLOCK */\r
-\r
-#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\r
-# if defined(__SVR4) || defined(__srv4__)\r
-# define PLATFORM_SOLARIS\r
-# else\r
-# define PLATFORM_SUNOS4\r
-# endif\r
-#endif\r
-#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)\r
-# define PLATFORM_AIX_V3\r
-#endif\r
-\r
-#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)\r
-#error "O_NONBLOCK does not work on this platform"\r
-#endif\r
- int socket;\r
- int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);\r
-],[\r
-dnl the O_NONBLOCK test was fine\r
-nonblock="O_NONBLOCK"\r
-AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])\r
-],[\r
-dnl the code was bad, try a different program now, test 2\r
-\r
- AC_TRY_COMPILE([\r
-/* headers for FIONBIO test */\r
-#include <unistd.h>\r
-#include <stropts.h>\r
-],[\r
-/* FIONBIO source test (old-style unix) */\r
- int socket;\r
- int flags = ioctl(socket, FIONBIO, &flags);\r
-],[\r
-dnl FIONBIO test was good\r
-nonblock="FIONBIO"\r
-AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])\r
-],[\r
-dnl FIONBIO test was also bad\r
-dnl the code was bad, try a different program now, test 3\r
-\r
- AC_TRY_COMPILE([\r
-/* headers for ioctlsocket test (cygwin?) */\r
-#include <windows.h>\r
-],[\r
-/* ioctlsocket source code */\r
- int socket;\r
- unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);\r
-],[\r
-dnl ioctlsocket test was good\r
-nonblock="ioctlsocket"\r
-AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])\r
-],[\r
-dnl ioctlsocket didnt compile!, go to test 4\r
-\r
- AC_TRY_LINK([\r
-/* headers for IoctlSocket test (Amiga?) */\r
-#include <sys/ioctl.h>\r
-],[\r
-/* IoctlSocket source code */\r
- int socket;\r
- int flags = IoctlSocket(socket, FIONBIO, (long)1);\r
-],[\r
-dnl ioctlsocket test was good\r
-nonblock="IoctlSocket"\r
-AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])\r
-],[\r
-dnl Ioctlsocket didnt compile, do test 5!\r
- AC_TRY_COMPILE([\r
-/* headers for SO_NONBLOCK test (BeOS) */\r
-#include <socket.h>\r
-],[\r
-/* SO_NONBLOCK source code */\r
- long b = 1;\r
- int socket;\r
- int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));\r
-],[\r
-dnl the SO_NONBLOCK test was good\r
-nonblock="SO_NONBLOCK"\r
-AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])\r
-],[\r
-dnl test 5 didnt compile!\r
-nonblock="nada"\r
-AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])\r
-])\r
-dnl end of fifth test\r
-\r
-])\r
-dnl end of forth test\r
-\r
-])\r
-dnl end of third test\r
-\r
-])\r
-dnl end of second test\r
-\r
-])\r
-dnl end of non-blocking try-compile test\r
- AC_MSG_RESULT($nonblock)\r
-\r
- if test "$nonblock" = "nada"; then\r
- AC_MSG_WARN([non-block sockets disabled])\r
- fi\r
-])\r
-\r
-dnl We create a function for detecting which compiler we use and then set as\r
-dnl pendantic compiler options as possible for that particular compiler. The\r
-dnl options are only used for debug-builds.\r
-\r
-dnl This is a copy of the original found in curl's configure script. Don't\r
-dnl modify this one, edit the one in curl and copy it back here when that one\r
-dnl is changed.\r
-\r
-AC_DEFUN([CURL_CC_DEBUG_OPTS],\r
-[\r
- if test "$GCC" = "yes"; then\r
-\r
- dnl figure out gcc version!\r
- AC_MSG_CHECKING([gcc version])\r
- gccver=`$CC -dumpversion`\r
- num1=`echo $gccver | cut -d . -f1`\r
- num2=`echo $gccver | cut -d . -f2`\r
- gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`\r
- AC_MSG_RESULT($gccver)\r
-\r
- AC_MSG_CHECKING([if this is icc in disguise])\r
- AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],\r
- dnl action if the text is found, this it has not been replaced by the\r
- dnl cpp\r
- ICC="no"\r
- AC_MSG_RESULT([no]),\r
- dnl the text was not found, it was replaced by the cpp\r
- ICC="yes"\r
- AC_MSG_RESULT([yes])\r
- )\r
-\r
- if test "$ICC" = "yes"; then\r
- dnl this is icc, not gcc.\r
-\r
- dnl ICC warnings we ignore:\r
- dnl * 279 warns on static conditions in while expressions\r
- dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:\r
- dnl "invalid format string conversion"\r
-\r
- WARN="-wd279,269"\r
-\r
- if test "$gccnum" -gt "600"; then\r
- dnl icc 6.0 and older doesn't have the -Wall flag\r
- WARN="-Wall $WARN"\r
- fi\r
- else dnl $ICC = yes\r
- dnl \r
- WARN="-W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wundef -Wpointer-arith -Wnested-externs -Winline -Wmissing-declarations -Wmissing-prototypes -Wsign-compare"\r
-\r
- dnl -Wcast-align is a bit too annoying ;-)\r
-\r
- if test "$gccnum" -ge "296"; then\r
- dnl gcc 2.96 or later\r
- WARN="$WARN -Wfloat-equal"\r
-\r
- if test "$gccnum" -gt "296"; then\r
- dnl this option does not exist in 2.96\r
- WARN="$WARN -Wno-format-nonliteral"\r
- fi\r
-\r
- dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on\r
- dnl on i686-Linux as it gives us heaps with false positives\r
- if test "$gccnum" -ge "303"; then\r
- dnl gcc 3.3 and later\r
- WARN="$WARN -Wendif-labels -Wstrict-prototypes"\r
- fi\r
- fi\r
-\r
- for flag in $CPPFLAGS; do\r
- case "$flag" in\r
- -I*)\r
- dnl include path\r
- add=`echo $flag | sed 's/^-I/-isystem /g'`\r
- WARN="$WARN $add"\r
- ;;\r
- esac\r
- done\r
-\r
- fi dnl $ICC = no\r
-\r
- CFLAGS="$CFLAGS $WARN"\r
-\r
- fi dnl $GCC = yes\r
-\r
- dnl strip off optimizer flags\r
- NEWFLAGS=""\r
- for flag in $CFLAGS; do\r
- case "$flag" in\r
- -O*)\r
- dnl echo "cut off $flag"\r
- ;;\r
- *)\r
- NEWFLAGS="$NEWFLAGS $flag"\r
- ;;\r
- esac\r
- done\r
- CFLAGS=$NEWFLAGS\r
-\r
-]) dnl end of AC_DEFUN()\r
-\r
-\r
-dnl This macro determines if the specified struct exists in the specified file\r
-dnl Syntax:\r
-dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])\r
-\r
-AC_DEFUN([CARES_CHECK_STRUCT], [\r
- AC_MSG_CHECKING([for struct $2])\r
- AC_TRY_COMPILE([$1], \r
- [\r
- struct $2 struct_instance;\r
- ], ac_struct="yes", ac_found="no")\r
- if test "$ac_struct" = "yes" ; then\r
- AC_MSG_RESULT(yes)\r
- $3\r
- else\r
- AC_MSG_RESULT(no)\r
- $4\r
- fi\r
-])\r
-\r
-dnl This macro determines if the specified constant exists in the specified file\r
-dnl Syntax:\r
-dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])\r
-\r
-AC_DEFUN([CARES_CHECK_CONSTANT], [\r
- AC_MSG_CHECKING([for $2])\r
- AC_EGREP_CPP(VARIABLEWASDEFINED,\r
- [\r
- $1\r
-\r
- #ifdef $2\r
- VARIABLEWASDEFINED\r
- #else\r
- NJET\r
- #endif\r
- ], ac_constant="yes", ac_constant="no"\r
- )\r
- if test "$ac_constant" = "yes" ; then\r
- AC_MSG_RESULT(yes)\r
- $3\r
- else\r
- AC_MSG_RESULT(no)\r
- $4\r
- fi\r
-])\r
-\r
-\r
+dnl Check for how to set a socket to non-blocking state. There seems to exist
+dnl four known different ways, with the one used almost everywhere being POSIX
+dnl and XPG3, while the other different ways for different systems (old BSD,
+dnl Windows and Amiga).
+dnl
+dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
+dnl O_NONBLOCK define is found but does not work. This condition is attempted
+dnl to get caught in this script by using an excessive number of #ifdefs...
+dnl
+AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
+[
+ AC_MSG_CHECKING([non-blocking sockets style])
+
+ AC_TRY_COMPILE([
+/* headers for O_NONBLOCK test */
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+],[
+/* try to compile O_NONBLOCK */
+
+#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# if defined(__SVR4) || defined(__srv4__)
+# define PLATFORM_SOLARIS
+# else
+# define PLATFORM_SUNOS4
+# endif
+#endif
+#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)
+# define PLATFORM_AIX_V3
+#endif
+
+#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
+#error "O_NONBLOCK does not work on this platform"
+#endif
+ int socket;
+ int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
+],[
+dnl the O_NONBLOCK test was fine
+nonblock="O_NONBLOCK"
+AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
+],[
+dnl the code was bad, try a different program now, test 2
+
+ AC_TRY_COMPILE([
+/* headers for FIONBIO test */
+#include <unistd.h>
+#include <stropts.h>
+],[
+/* FIONBIO source test (old-style unix) */
+ int socket;
+ int flags = ioctl(socket, FIONBIO, &flags);
+],[
+dnl FIONBIO test was good
+nonblock="FIONBIO"
+AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
+],[
+dnl FIONBIO test was also bad
+dnl the code was bad, try a different program now, test 3
+
+ AC_TRY_COMPILE([
+/* headers for ioctlsocket test (cygwin?) */
+#include <windows.h>
+],[
+/* ioctlsocket source code */
+ int socket;
+ unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
+],[
+dnl ioctlsocket test was good
+nonblock="ioctlsocket"
+AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
+],[
+dnl ioctlsocket didnt compile!, go to test 4
+
+ AC_TRY_LINK([
+/* headers for IoctlSocket test (Amiga?) */
+#include <sys/ioctl.h>
+],[
+/* IoctlSocket source code */
+ int socket;
+ int flags = IoctlSocket(socket, FIONBIO, (long)1);
+],[
+dnl ioctlsocket test was good
+nonblock="IoctlSocket"
+AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
+],[
+dnl Ioctlsocket didnt compile, do test 5!
+ AC_TRY_COMPILE([
+/* headers for SO_NONBLOCK test (BeOS) */
+#include <socket.h>
+],[
+/* SO_NONBLOCK source code */
+ long b = 1;
+ int socket;
+ int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
+],[
+dnl the SO_NONBLOCK test was good
+nonblock="SO_NONBLOCK"
+AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
+],[
+dnl test 5 didnt compile!
+nonblock="nada"
+AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
+])
+dnl end of fifth test
+
+])
+dnl end of forth test
+
+])
+dnl end of third test
+
+])
+dnl end of second test
+
+])
+dnl end of non-blocking try-compile test
+ AC_MSG_RESULT($nonblock)
+
+ if test "$nonblock" = "nada"; then
+ AC_MSG_WARN([non-block sockets disabled])
+ fi
+])
+
+dnl We create a function for detecting which compiler we use and then set as
+dnl pendantic compiler options as possible for that particular compiler. The
+dnl options are only used for debug-builds.
+
+dnl This is a copy of the original found in curl's configure script. Don't
+dnl modify this one, edit the one in curl and copy it back here when that one
+dnl is changed.
+
+AC_DEFUN([CURL_CC_DEBUG_OPTS],
+[
+ if test "$GCC" = "yes"; then
+
+ dnl figure out gcc version!
+ AC_MSG_CHECKING([gcc version])
+ gccver=`$CC -dumpversion`
+ num1=`echo $gccver | cut -d . -f1`
+ num2=`echo $gccver | cut -d . -f2`
+ gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
+ AC_MSG_RESULT($gccver)
+
+ AC_MSG_CHECKING([if this is icc in disguise])
+ AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
+ dnl action if the text is found, this it has not been replaced by the
+ dnl cpp
+ ICC="no"
+ AC_MSG_RESULT([no]),
+ dnl the text was not found, it was replaced by the cpp
+ ICC="yes"
+ AC_MSG_RESULT([yes])
+ )
+
+ if test "$ICC" = "yes"; then
+ dnl this is icc, not gcc.
+
+ dnl ICC warnings we ignore:
+ dnl * 279 warns on static conditions in while expressions
+ dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
+ dnl "invalid format string conversion"
+
+ WARN="-wd279,269"
+
+ if test "$gccnum" -gt "600"; then
+ dnl icc 6.0 and older doesn't have the -Wall flag
+ WARN="-Wall $WARN"
+ fi
+ else dnl $ICC = yes
+ dnl
+ WARN="-W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wundef -Wpointer-arith -Wnested-externs -Winline -Wmissing-declarations -Wmissing-prototypes -Wsign-compare"
+
+ dnl -Wcast-align is a bit too annoying ;-)
+
+ if test "$gccnum" -ge "296"; then
+ dnl gcc 2.96 or later
+ WARN="$WARN -Wfloat-equal"
+
+ if test "$gccnum" -gt "296"; then
+ dnl this option does not exist in 2.96
+ WARN="$WARN -Wno-format-nonliteral"
+ fi
+
+ dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
+ dnl on i686-Linux as it gives us heaps with false positives
+ if test "$gccnum" -ge "303"; then
+ dnl gcc 3.3 and later
+ WARN="$WARN -Wendif-labels -Wstrict-prototypes"
+ fi
+ fi
+
+ for flag in $CPPFLAGS; do
+ case "$flag" in
+ -I*)
+ dnl include path
+ add=`echo $flag | sed 's/^-I/-isystem /g'`
+ WARN="$WARN $add"
+ ;;
+ esac
+ done
+
+ fi dnl $ICC = no
+
+ CFLAGS="$CFLAGS $WARN"
+
+ fi dnl $GCC = yes
+
+ dnl strip off optimizer flags
+ NEWFLAGS=""
+ for flag in $CFLAGS; do
+ case "$flag" in
+ -O*)
+ dnl echo "cut off $flag"
+ ;;
+ *)
+ NEWFLAGS="$NEWFLAGS $flag"
+ ;;
+ esac
+ done
+ CFLAGS=$NEWFLAGS
+
+]) dnl end of AC_DEFUN()
+
+
+dnl This macro determines if the specified struct exists in the specified file
+dnl Syntax:
+dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
+
+AC_DEFUN([CARES_CHECK_STRUCT], [
+ AC_MSG_CHECKING([for struct $2])
+ AC_TRY_COMPILE([$1],
+ [
+ struct $2 struct_instance;
+ ], ac_struct="yes", ac_found="no")
+ if test "$ac_struct" = "yes" ; then
+ AC_MSG_RESULT(yes)
+ $3
+ else
+ AC_MSG_RESULT(no)
+ $4
+ fi
+])
+
+dnl This macro determines if the specified constant exists in the specified file
+dnl Syntax:
+dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
+
+AC_DEFUN([CARES_CHECK_CONSTANT], [
+ AC_MSG_CHECKING([for $2])
+ AC_EGREP_CPP(VARIABLEWASDEFINED,
+ [
+ $1
+
+ #ifdef $2
+ VARIABLEWASDEFINED
+ #else
+ NJET
+ #endif
+ ], ac_constant="yes", ac_constant="no"
+ )
+ if test "$ac_constant" = "yes" ; then
+ AC_MSG_RESULT(yes)
+ $3
+ else
+ AC_MSG_RESULT(no)
+ $4
+ fi
+])
+
+
+dnl This macro determines how many parameters getservbyport_r takes
+AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
+ AC_MSG_CHECKING([how many arguments getservbyport_r takes])
+ AC_TRY_COMPILE(
+ [#include <netdb.h>],
+ [
+ int p1, p5;
+ char *p2, p4[4096];
+ struct servent *p3, *p6;
+ getservbyport_r(p1, p2, p3, p4, p5, &p6);
+ ], ac_func_getservbyport_r=6,
+ [AC_TRY_COMPILE(
+ [#include <netdb.h>],
+ [
+ int p1, p5;
+ char *p2, p4[4096];
+ struct servent *p3;
+ getservbyport_r(p1, p2, p3, p4, p5);
+ ], ac_func_getservbyport_r=5,
+ [AC_TRY_COMPILE(
+ [#include <netdb.h>],
+ [
+ int p1;
+ char *p2;
+ struct servent *p3;
+ struct servent_data p4;
+ getservbyport_r(p1, p2, p3, &p4);
+ ], ac_func_getservbyport_r=4, ac_func_getservbyport_r=0
+ )]
+ )]
+ )
+if test $ac_func_getservbyport_r != "0" ; then
+ AC_MSG_RESULT($ac_func_getservbyport_r)
+ AC_DEFINE(HAVE_GETSERVBYPORT_R, 1, [Specifies whether getservbyport_r is present])
+ AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r, [Specifies the number of arguments to
+getservbyport_r])
+ if test $ac_func_getservbyport_r = "4" ; then
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), [Specifies the size of the buffer to pass to
+getservbyport_r])
+ else
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, [Specifies the size of the buffer to pass to getservbyport_r])
+ fi
+else
+ AC_MSG_RESULT([not found])
+fi
+])
+
/* ares_getnameinfo error codes */
#define ARES_EBADFLAGS 18
+/* ares_getaddrinfo error codes */
+#define ARES_ENONAME 19
+#define ARES_EBADHINTS 20
+
/* Flag values */
#define ARES_FLAG_USEVC (1 << 0)
#define ARES_FLAG_PRIMARY (1 << 1)
#define ARES_NI_LOOKUPHOST (1 << 8)
#define ARES_NI_LOOKUPSERVICE (1 << 9)
/* Reserved for future use */
-#define ARES_NI_IDN (1 << 10)
-#define ARES_NI_ALLOW_UNASSIGNED (1 << 11)
-#define ARES_NI_USE_STD3_ASCII_RULES (1 << 12)
+#define ARES_NI_IDN (1 << 10)
+#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
+#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
+
+/* Addrinfo flag values */
+#define ARES_AI_CANONNAME (1 << 0)
+#define ARES_AI_NUMERICHOST (1 << 1)
+#define ARES_AI_PASSIVE (1 << 2)
+#define ARES_AI_NUMERICSERV (1 << 3)
+#define ARES_AI_V4MAPPED (1 << 4)
+#define ARES_AI_ALL (1 << 5)
+#define ARES_AI_ADDRCONFIG (1 << 6)
+/* Reserved for future use */
+#define ARES_AI_IDN (1 << 10)
+#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
+#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
+#define ARES_AI_CANONIDN (1 << 13)
+
+#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
+ ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
+ ARES_AI_ADDRCONFIG)
struct ares_options {
int flags;
{
struct servent *se;
const char *proto;
-
+#if GETSERVBYPORT_R_ARGS == 6
+ struct servent ret;
+ char buf[4096];
+ int len = 4096;
+#elif GETSERVBYPORT_R_ARGS == 5
+ char buf[4096];
+ int len = 4096;
+#elif GETSERVBYPORT_R_ARGS == 4
+ struct servent_data sed;
+#endif
if (flags & ARES_NI_UDP)
proto = "udp";
else if (flags & ARES_NI_SCTP)
proto = "dccp";
else
proto = "tcp";
+#ifdef HAVE_GETSERVBYPORT_R
+ #if GETSERVBYPORT_R_ARGS == 6
+ if (getservbyport_r(port, proto, se, buf, len, &ret))
+ se = NULL;
+ #elif GETSERVBYPORT_R_ARGS == 5
+ se = getservbyport_r(port, proto, se, buf, len);
+ #elif GETSERVBYPORT_R_ARGS == 4
+ if (getservbyport_r(port, proto, se, &sed) == -1)
+ se = NULL;
+ #else
+ /* Lets just hope the OS uses TLS! */
+ se = getservbyport(port, proto);
+ #endif
+#else
+ /* Lets just hope the OS uses TLS! */
se = getservbyport(port, proto);
+#endif
if (se && se->s_name)
strcpy(buf, se->s_name);
else
-dnl Process this file with autoconf to produce a configure script.\r
-AC_INIT(ares_init.c)\r
-AM_CONFIG_HEADER(config.h)\r
-AM_MAINTAINER_MODE\r
-AM_INIT_AUTOMAKE(c-ares, CVS)\r
-\r
-AC_PROG_CC\r
-AC_PROG_INSTALL\r
-\r
-case $host_os in\r
-solaris*)\r
- AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])\r
- ;;\r
-esac\r
-\r
-# check for ssize_t\r
-AC_CHECK_TYPE(ssize_t, ,\r
- AC_DEFINE(ssize_t, int, [the signed version of size_t]))\r
-\r
-AC_SEARCH_LIBS(gethostbyname, nsl)\r
-AC_SEARCH_LIBS(socket, socket)\r
-\r
-dnl ************************************************************\r
-dnl Option to switch on debug options. This makes an assumption that\r
-dnl this is built as an 'ares' subdir in the curl source tree. Subject for\r
-dnl improval in the future!\r
-dnl\r
-AC_MSG_CHECKING([whether to enable debug options])\r
-AC_ARG_ENABLE(debug,\r
-AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])\r
-AC_HELP_STRING([--disable-debug],[Disable debug options]),\r
-[ case "$enableval" in\r
- no)\r
- AC_MSG_RESULT(no)\r
- ;;\r
- *) AC_MSG_RESULT(yes)\r
-\r
- dnl when doing the debug stuff, use static library only\r
- AC_DISABLE_SHARED\r
-\r
- dnl Checks for standard header files, to make memdebug.h inclusions bettter\r
- AC_HEADER_STDC\r
-\r
- dnl the entire --enable-debug is a hack that lives and runs on top of\r
- dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier\r
- AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])\r
-\r
- CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"\r
- CFLAGS="$CFLAGS -g" \r
-\r
- dnl set compiler "debug" options to become more picky, and remove\r
- dnl optimize options from CFLAGS\r
- CURL_CC_DEBUG_OPTS\r
-\r
- ;;\r
- esac ],\r
- AC_MSG_RESULT(no)\r
-)\r
-\r
-AC_PROG_LIBTOOL\r
-\r
-dnl check for a few basic system headers we need\r
-AC_CHECK_HEADERS(\r
- sys/types.h \\r
- sys/time.h \\r
- sys/select.h \\r
- sys/socket.h \\r
- sys/ioctl.h \\r
- winsock.h \\r
- netinet/in.h \\r
- net/if.h \\r
- arpa/nameser.h \\r
- arpa/nameser_compat.h \\r
- arpa/inet.h, , ,\r
-[\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-dnl We do this default-include simply to make sure that the nameser_compat.h\r
-dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1\r
-dnl (and others?) is not designed to allow this.\r
-#ifdef HAVE_ARPA_NAMESER_H\r
-#include <arpa/nameser.h>\r
-#endif\r
-\r
-dnl *Sigh* these are needed in order for net/if.h to get properly detected.\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-]\r
- )\r
-\r
-AC_CHECK_TYPE(socklen_t, ,\r
- AC_DEFINE(socklen_t, int, [the length of a socket address]), \r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
- ])\r
-\r
-dnl check for AF_INET6\r
-CARES_CHECK_CONSTANT(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-\r
- ], [PF_INET6], \r
- AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])\r
-)\r
-\r
-dnl check for PF_INET6\r
-CARES_CHECK_CONSTANT(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-\r
- ], [AF_INET6], \r
- AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])\r
-)\r
-\r
-\r
-dnl check for the in6_addr structure\r
-CARES_CHECK_STRUCT(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
- ], [in6_addr], \r
- AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])\r
-)\r
-\r
-dnl check for the sockaddr_in6 structure\r
-CARES_CHECK_STRUCT(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
- ], [sockaddr_in6], \r
- AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,\r
- [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes\r
-)\r
-\r
-if test "$ac_have_sockaddr_in6" = "yes" ; then\r
-AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,\r
- AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,\r
- [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])\r
- , ,\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
- ], [sockaddr_in6], [sin6_scope_id],\r
-)\r
-fi\r
-\r
-dnl check for the addrinfo structure\r
-CARES_CHECK_STRUCT(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
- ], [addrinfo], \r
- AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,\r
- [Define to 1 if you have struct addrinfo.])\r
-)\r
-\r
-dnl check for inet_pton\r
-AC_CHECK_FUNCS(inet_pton)\r
-dnl Some systems have it, but not IPv6\r
-if test "$ac_cv_func_inet_pton" = "yes" ; then\r
-AC_MSG_CHECKING(if inet_pton supports IPv6)\r
-AC_TRY_RUN(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
-int main()\r
- {\r
- struct in6_addr addr6;\r
- if (inet_pton(AF_INET6, "::1", &addr6) < 1)\r
- exit(1);\r
- else\r
- exit(0);\r
- }\r
- ], [\r
- AC_MSG_RESULT(yes)\r
- AC_DEFINE_UNQUOTED(HAVE_INET_PTON_IPV6,1,[Define to 1 if inet_pton supports IPv6.])\r
- ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))\r
-fi\r
-dnl Check for inet_net_pton\r
-AC_CHECK_FUNCS(inet_net_pton)\r
-dnl Again, some systems have it, but not IPv6\r
-if test "$ac_cv_func_inet_net_pton" = "yes" ; then\r
-AC_MSG_CHECKING(if inet_net_pton supports IPv6)\r
-AC_TRY_RUN(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
-int main()\r
- {\r
- struct in6_addr addr6;\r
- if (inet_net_pton(AF_INET6, "::1", &addr6, sizeof(addr6)) < 1)\r
- exit(1);\r
- else\r
- exit(0);\r
- }\r
- ], [\r
- AC_MSG_RESULT(yes)\r
- AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON_IPV6,1,[Define to 1 if inet_net_pton supports IPv6.])\r
- ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))\r
-fi\r
-\r
-\r
-dnl Check for inet_ntop\r
-AC_CHECK_FUNCS(inet_ntop)\r
-dnl Again, some systems have it, but not IPv6\r
-if test "$ac_cv_func_inet_ntop" = "yes" ; then\r
-AC_MSG_CHECKING(if inet_ntop supports IPv6)\r
-AC_TRY_RUN(\r
- [\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
-#include <errno.h>\r
-int main()\r
- {\r
- struct in6_addr addr6;\r
- char buf[128];\r
- if (inet_ntop(AF_INET6, &addr6, buf, 128) == 0 && errno == EAFNOSUPPORT)\r
- exit(1);\r
- else\r
- exit(0);\r
- }\r
- ], [\r
- AC_MSG_RESULT(yes)\r
- AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,[Define to 1 if inet_ntop supports IPv6.])\r
- ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))\r
-fi\r
-\r
-AC_CHECK_SIZEOF(struct in6_addr, ,\r
-[\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
-]\r
-)\r
-AC_CHECK_SIZEOF(struct in_addr, ,\r
-[\r
-#ifdef HAVE_SYS_TYPES_H\r
-#include <sys/types.h>\r
-#endif\r
-#ifdef HAVE_SYS_SOCKET_H\r
-#include <sys/socket.h>\r
-#endif\r
-#ifdef HAVE_WINSOCK_H\r
-#include <winsock.h>\r
-#endif\r
-#ifdef HAVE_NETINET_IN_H\r
-#include <netinet/in.h>\r
-#endif\r
-]\r
-)\r
-\r
-AC_CHECK_FUNCS([bitncmp if_indextoname])\r
-\r
-CURL_CHECK_NONBLOCKING_SOCKET\r
-\r
-AC_OUTPUT(Makefile)\r
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(ares_init.c)
+AM_CONFIG_HEADER(config.h)
+AM_MAINTAINER_MODE
+AM_INIT_AUTOMAKE(c-ares, CVS)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+
+case $host_os in
+solaris*)
+ AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
+ ;;
+esac
+
+# check for ssize_t
+AC_CHECK_TYPE(ssize_t, ,
+ AC_DEFINE(ssize_t, int, [the signed version of size_t]))
+
+AC_SEARCH_LIBS(gethostbyname, nsl)
+AC_SEARCH_LIBS(socket, socket)
+
+dnl ************************************************************
+dnl Option to switch on debug options. This makes an assumption that
+dnl this is built as an 'ares' subdir in the curl source tree. Subject for
+dnl improval in the future!
+dnl
+AC_MSG_CHECKING([whether to enable debug options])
+AC_ARG_ENABLE(debug,
+AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
+AC_HELP_STRING([--disable-debug],[Disable debug options]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *) AC_MSG_RESULT(yes)
+
+ dnl when doing the debug stuff, use static library only
+ AC_DISABLE_SHARED
+
+ dnl Checks for standard header files, to make memdebug.h inclusions bettter
+ AC_HEADER_STDC
+
+ dnl the entire --enable-debug is a hack that lives and runs on top of
+ dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
+ AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
+
+ CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
+ CFLAGS="$CFLAGS -g"
+
+ dnl set compiler "debug" options to become more picky, and remove
+ dnl optimize options from CFLAGS
+ CURL_CC_DEBUG_OPTS
+
+ ;;
+ esac ],
+ AC_MSG_RESULT(no)
+)
+
+AC_PROG_LIBTOOL
+
+dnl check for a few basic system headers we need
+AC_CHECK_HEADERS(
+ sys/types.h \
+ sys/time.h \
+ sys/select.h \
+ sys/socket.h \
+ sys/ioctl.h \
+ winsock.h \
+ netinet/in.h \
+ net/if.h \
+ arpa/nameser.h \
+ arpa/nameser_compat.h \
+ arpa/inet.h, , ,
+[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+dnl We do this default-include simply to make sure that the nameser_compat.h
+dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
+dnl (and others?) is not designed to allow this.
+#ifdef HAVE_ARPA_NAMESER_H
+#include <arpa/nameser.h>
+#endif
+
+dnl *Sigh* these are needed in order for net/if.h to get properly detected.
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+]
+ )
+
+AC_CHECK_TYPE(socklen_t, ,
+ AC_DEFINE(socklen_t, int, [the length of a socket address]),
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+ ])
+
+dnl check for AF_INET6
+CARES_CHECK_CONSTANT(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+ ], [PF_INET6],
+ AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
+)
+
+dnl check for PF_INET6
+CARES_CHECK_CONSTANT(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+ ], [AF_INET6],
+ AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
+)
+
+
+dnl check for the in6_addr structure
+CARES_CHECK_STRUCT(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+ ], [in6_addr],
+ AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
+)
+
+dnl check for the sockaddr_in6 structure
+CARES_CHECK_STRUCT(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+ ], [sockaddr_in6],
+ AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
+ [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
+)
+
+if test "$ac_have_sockaddr_in6" = "yes" ; then
+AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
+ AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
+ [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
+ , ,
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+ ], [sockaddr_in6], [sin6_scope_id],
+)
+fi
+
+dnl check for the addrinfo structure
+CARES_CHECK_STRUCT(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+ ], [addrinfo],
+ AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
+ [Define to 1 if you have struct addrinfo.])
+)
+
+dnl check for inet_pton
+AC_CHECK_FUNCS(inet_pton)
+dnl Some systems have it, but not IPv6
+if test "$ac_cv_func_inet_pton" = "yes" ; then
+AC_MSG_CHECKING(if inet_pton supports IPv6)
+AC_TRY_RUN(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+int main()
+ {
+ struct in6_addr addr6;
+ if (inet_pton(AF_INET6, "::1", &addr6) < 1)
+ exit(1);
+ else
+ exit(0);
+ }
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_INET_PTON_IPV6,1,[Define to 1 if inet_pton supports IPv6.])
+ ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
+fi
+dnl Check for inet_net_pton
+AC_CHECK_FUNCS(inet_net_pton)
+dnl Again, some systems have it, but not IPv6
+if test "$ac_cv_func_inet_net_pton" = "yes" ; then
+AC_MSG_CHECKING(if inet_net_pton supports IPv6)
+AC_TRY_RUN(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+int main()
+ {
+ struct in6_addr addr6;
+ if (inet_net_pton(AF_INET6, "::1", &addr6, sizeof(addr6)) < 1)
+ exit(1);
+ else
+ exit(0);
+ }
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON_IPV6,1,[Define to 1 if inet_net_pton supports IPv6.])
+ ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
+fi
+
+
+dnl Check for inet_ntop
+AC_CHECK_FUNCS(inet_ntop)
+dnl Again, some systems have it, but not IPv6
+if test "$ac_cv_func_inet_ntop" = "yes" ; then
+AC_MSG_CHECKING(if inet_ntop supports IPv6)
+AC_TRY_RUN(
+ [
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#include <errno.h>
+int main()
+ {
+ struct in6_addr addr6;
+ char buf[128];
+ if (inet_ntop(AF_INET6, &addr6, buf, 128) == 0 && errno == EAFNOSUPPORT)
+ exit(1);
+ else
+ exit(0);
+ }
+ ], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,[Define to 1 if inet_ntop supports IPv6.])
+ ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
+fi
+
+AC_CHECK_SIZEOF(struct in6_addr, ,
+[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+]
+)
+AC_CHECK_SIZEOF(struct in_addr, ,
+[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+]
+)
+
+AC_CHECK_FUNCS([bitncmp if_indextoname])
+
+dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available
+CARES_CHECK_GETSERVBYPORT_R
+
+CURL_CHECK_NONBLOCKING_SOCKET
+
+AC_OUTPUT(Makefile)