From: Sara Golemon Date: Fri, 12 Mar 2004 00:16:38 +0000 (+0000) Subject: Test getaddrinfo() for brokenness. Pretend it doesn't exist if it misbehaves. X-Git-Tag: php-4.3.5RC4~34 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=168786cfcf76ad671bac53e129a52523b804801c;p=php Test getaddrinfo() for brokenness. Pretend it doesn't exist if it misbehaves. --- diff --git a/configure.in b/configure.in index 17b145f33c..6caada3f87 100644 --- a/configure.in +++ b/configure.in @@ -521,10 +521,45 @@ vsnprintf \ ) dnl Check for getaddrinfo, should be a better way, but... +dnl Also check for working getaddrinfo AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo, [AC_TRY_LINK([#include ], - [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], - ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)]) + [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], + AC_TRY_RUN([ +#include +#include +int main(void) { + struct addrinfo *ai, *pai, hints; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + + if (getaddrinfo("127.0.0.1", NULL, &hints, &ai) < 0) { + exit(1); + } + + if (ai == NULL) { + exit(1); + } + + pai = ai; + + while (pai) { + if (pai->ai_family != AF_INET) { + /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ + exit(1); + } + if (pai->ai_addr->sa_family != AF_INET) { + /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ + exit(1); + } + pai = pai->ai_next; + } + freeaddrinfo(ai); + exit(0); +} + ],ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no), +ac_cv_func_getaddrinfo=no)]) if test "$ac_cv_func_getaddrinfo" = yes; then AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function]) fi