Re: cvs: php4 / configure.in /main network.c
| From: | Zeev Suraski | Date: | Sat, 13 Jan 2001 12:58:35 +0000 |
| Subject: | Re: cvs: php4 / configure.in /main network.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-3588@lists.php.net to get a copy of this message | ||
All those EAI things, where are they coming from? They don't exist in Windows (apparently)
At 13:48 13/1/2001, Stig Venaas wrote:
-- Zeev Suraski <zeev@zend.com> CTO & co-founder, Zend Technologies Ltd. http://www.zend.com/venaas Sat Jan 13 03:48:47 2001 EDTModified files:/php4 configure.in /php4/main network.cLog: Simplified code a bit, added detailed error reporting, and fixed a bug when getaddrinfo returned a non-IP family before IP families Index: php4/configure.in diff -u php4/configure.in:1.209 php4/configure.in:1.210--- php4/configure.in:1.209 Tue Jan 9 17:34:40 2001+++ php4/configure.in Sat Jan 13 03:48:47 2001 @@ -1,4 +1,4 @@ -dnl ## $Id: configure.in,v 1.209 2001/01/10 01:34:40 ssb Exp $ -*- sh -*- +dnl ## $Id: configure.in,v 1.210 2001/01/13 11:48:47 venaas Exp $ -*- sh -*- dnl ## Process this file with autoconf to produce a configure script. divert(1) @@ -356,6 +356,7 @@ ctime_r \ cuserid \ flock \ +gai_strerror \ gcvt \ getlogin \ gethostbyaddr \ Index: php4/main/network.c diff -u php4/main/network.c:1.10 php4/main/network.c:1.11--- php4/main/network.c:1.10 Thu Oct 19 05:18:02 2000+++ php4/main/network.c Sat Jan 13 03:48:47 2001 @@ -15,7 +15,7 @@| Authors: Stig Venaas <venaas@uninett.no> | +----------------------------------------------------------------------+*/ -/* $Id: network.c,v 1.10 2000/10/19 12:18:02 venaas Exp $ */ +/* $Id: network.c,v 1.11 2001/01/13 11:48:47 venaas Exp $ */ #include "php.h" @@ -59,6 +59,44 @@ # define SOCK_CONN_ERR -1 #endif +#ifdef HAVE_GAI_STRERROR +# define PHP_GAI_STRERROR(x) (gai_strerror(x)) +#else +# define PHP_GAI_STRERROR(x) (php_gai_strerror(x)) +static char *php_gai_strerror(int code) {+ static struct { + int code; + const char *msg; + } values[] = {+# ifdef EAI_ADDRFAMILY+ {EAI_ADDRFAMILY, "Address family for hostname not supported"},+# endif+ {EAI_AGAIN, "Temporary failure in name resolution"}, + {EAI_BADFLAGS, "Bad value for ai_flags"}, + {EAI_FAIL, "Non-recoverable failure in name resolution"}, + {EAI_FAMILY, "ai_family not supported"}, + {EAI_MEMORY, "Memory allocation failure"},+# ifdef EAI_NODATA+ {EAI_NODATA, "No address associated with hostname"},+# endif+ {EAI_NONAME, "Name or service not known"}, + {EAI_SERVICE, "Servname not supported for ai_socktype"}, + {EAI_SOCKTYPE, "ai_socktype not supported"}, + {EAI_SYSTEM, "System error"}, + {0, NULL} + }; + int i;++ for (i = 0; values[i].msg != NULL; i++) { + if (values[i].code == code) { + return (char *)values[i].msg; + } + }++ return "Unknown error";+} +#endif + static void php_network_freeaddresses(struct sockaddr **sal) {struct sockaddr **sap;@@ -73,53 +111,47 @@ static int php_network_getaddresses(const char *host, struct sockaddr ***sal) {struct sockaddr **sap;-- if (host != NULL) {++ if (host == NULL) { + return -1; + }++ {#ifdef HAVE_GETADDRINFO- struct addrinfo hints, *res, *sai; + struct addrinfo hints, *res, *sai; int n;- memset( &hints, '\0', sizeof(hints) ); - hints.ai_family = AF_UNSPEC; - if (getaddrinfo(host, NULL, &hints, &res)) - return -1; - sai = res; - for (n=2; (sai = sai->ai_next) != NULL; n++); - *sal = emalloc(n * sizeof(*sal)); - if (*sal == NULL) + memset(&hints, '\0', sizeof(hints)); + hints.ai_family = AF_UNSPEC; + if (n = getaddrinfo(host, NULL, &hints, &res)) { + php_error(E_WARNING, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n)); return -1; + }- sai = res; + sai = res; + for (n=2; (sai = sai->ai_next) != NULL; n++); + *sal = emalloc(n * sizeof(*sal)); + sai = res; sap = *sal; - do { - switch (sai->ai_family) { + do { + switch (sai->ai_family) {# ifdef HAVE_IPV6- case AF_INET6: { + case AF_INET6: *sap = emalloc(sizeof(struct sockaddr_in6)); - if (*sap == NULL) { - freeaddrinfo(res); - goto errexit; - } *(struct sockaddr_in6 *)*sap = *((struct sockaddr_in6 *)sai->ai_addr); - } break; + sap++; + break;# endif- case AF_INET: { + case AF_INET: *sap = emalloc(sizeof(struct sockaddr_in)); - if (*sap == NULL) { - freeaddrinfo(res); - goto errexit; - } *(struct sockaddr_in *)*sap = *((struct sockaddr_in *)sai->ai_addr); - } break; - default: - *sap = NULL; + sap++; break; - } - sap++; - } while ((sai = sai->ai_next) != NULL); - freeaddrinfo(res); + } + } while ((sai = sai->ai_next) != NULL); + freeaddrinfo(res);#elsestruct hostent *host_info; struct in_addr in;@@ -127,29 +159,23 @@if (!inet_aton(host, &in)) { /* XXX NOT THREAD SAFE */ host_info = gethostbyname(host); - if (host_info == NULL) + if (host_info == NULL) { + php_error(E_WARNING, "php_network_getaddresses: gethostbyname failed"); return -1; + } in = *((struct in_addr *) host_info->h_addr); }*sal = emalloc(2 * sizeof(*sal)); - if (*sal == NULL) - return -1; sap = *sal; *sap = emalloc(sizeof(struct sockaddr_in)); - if (*sap == NULL) - goto errexit;-(*sap)->sa_family = AF_INET; ((struct sockaddr_in *)*sap)->sin_addr = in; sap++;#endif- *sap = NULL; - return 0; - errexit: - php_network_freeaddresses(*sal); - } - return -1; + } + *sap = NULL; + return 0;} /* @@ -199,6 +225,7 @@sal++; } php_network_freeaddresses(psal); + php_error(E_WARNING, "php_hostconnect: connect failed"); return -1;ok: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-cvs-unsubscribe@lists.php.net For additional commands, e-mail: php-cvs-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net