pollita Mon Jul 7 23:38:00 2003 EDT Modified files: /php-src/ext/sockets config.m4 sockets.c Log: Make php_set_inet6_addr happy with any environment. Use getaddrinfo() if available, gethostbyname2() if not, and simply fail if neither is present. Index: php-src/ext/sockets/config.m4 diff -u php-src/ext/sockets/config.m4:1.14 php-src/ext/sockets/config.m4:1.15 --- php-src/ext/sockets/config.m4:1.14 Thu Jun 19 04:41:51 2003 +++ php-src/ext/sockets/config.m4 Mon Jul 7 23:38:00 2003 @@ -1,5 +1,5 @@ dnl -dnl $Id: config.m4,v 1.14 2003/06/19 08:41:51 derick Exp $ +dnl $Id: config.m4,v 1.15 2003/07/08 03:38:00 pollita Exp $ dnl PHP_ARG_ENABLE(sockets, whether to enable sockets support, @@ -30,3 +30,6 @@ PHP_NEW_EXTENSION([sockets], [sockets.c], [$ext_shared]) fi + +PHP_CHECK_FUNC(gethostbyname2) + Index: php-src/ext/sockets/sockets.c diff -u php-src/ext/sockets/sockets.c:1.144 php-src/ext/sockets/sockets.c:1.145 --- php-src/ext/sockets/sockets.c:1.144 Mon Jul 7 18:27:32 2003 +++ php-src/ext/sockets/sockets.c Mon Jul 7 23:38:00 2003 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: sockets.c,v 1.144 2003/07/07 22:27:32 pollita Exp $ */ +/* $Id: sockets.c,v 1.145 2003/07/08 03:38:00 pollita Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -378,12 +378,18 @@ static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock TSRMLS_DC) { struct in6_addr tmp; +#ifdef HAVE_GETADDRINFO struct addrinfo hints; struct addrinfo *addrinfo = NULL; +#elif defined(HAVE_GETHOSTBYNAME2) + struct hostent *host_entry; +#endif if (inet_pton(AF_INET6, string, &tmp)) { memcpy(&(sin6->sin6_addr.s6_addr), &(tmp.s6_addr), sizeof(struct in6_addr)); } else { +#ifdef HAVE_GETADDRINFO + memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = PF_INET6; getaddrinfo(string, NULL, &hints, &addrinfo); @@ -403,6 +409,29 @@ memcpy(&(sin6->sin6_addr.s6_addr), ((struct sockaddr_in6*)(addrinfo->ai_addr))->sin6_addr.s6_addr, sizeof(struct in6_addr)); freeaddrinfo(addrinfo); + +#elif defined(HAVE_GETHOSTBYNAME2) + + if (! (host_entry = gethostbyname2(string, AF_INET6))) { +#ifdef PHP_WIN32 + PHP_SOCKET_ERROR(php_sock, "Host lookup failed", WSAGetLastError()); +#else + PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno)); +#endif + return 0; + } + if (host_entry->h_addrtype != AF_INET6) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Host lookup failed: Non AF_INET6 domain returned on AF_INET6 socket"); + return 0; + } + memcpy(&(sin6->sin6_addr.s6_addr), host_entry->h_addr_list[0], host_entry->h_length); + +#else + /* No IPv6 specific hostname resolution is available on this system? */ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No IPv6 compatable hostname resolution available on system."); + reurn 0; +#endif + } return 1;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php