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

Reply via email to