]> granicus.if.org Git - php/commitdiff
Raise a warning when listen = hostname used and is resolved as multiple addresses
authorRemi Collet <remi@php.net>
Thu, 20 Nov 2014 09:15:15 +0000 (10:15 +0100)
committerRemi Collet <remi@php.net>
Thu, 20 Nov 2014 09:15:15 +0000 (10:15 +0100)
Using getaddrinfo is perhaps not a good idea... if we are not able
to listen on multiple addresses...

At least this message should help to diagnose problem, ex
... Found address for localhost, socket opened on ::1
... Found multiple addresses for localhost, 127.0.0.1 ignored

sapi/fpm/fpm/fpm_sockets.c

index 9d9def35c7c1c3aa8ee4d91706520ec214744e84..0286f0eee8d1b47b3cafac1fbc80e2fa624f0a6b 100644 (file)
@@ -255,6 +255,7 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
        char *dup_address = strdup(wp->config->listen_address);
        char *port_str = strrchr(dup_address, ':');
        char *addr = NULL;
+       char tmpbuf[INET6_ADDRSTRLEN];
        int addr_len;
        int port = 0;
        int sock = -1;
@@ -302,14 +303,18 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
                return -1;
        }
 
-       free(dup_address);
-
        for (p = servinfo; p != NULL; p = p->ai_next) {
-               if ((sock = fpm_sockets_get_listening_socket(wp, p->ai_addr, p->ai_addrlen)) != -1) {
-                       break;
+               inet_ntop(p->ai_family, fpm_get_in_addr(p->ai_addr), tmpbuf, INET6_ADDRSTRLEN);
+               if (sock < 0) {
+                       if ((sock = fpm_sockets_get_listening_socket(wp, p->ai_addr, p->ai_addrlen)) != -1) {
+                               zlog(ZLOG_DEBUG, "Found address for %s, socket opened on %s", dup_address, tmpbuf);
+                       }
+               } else {
+                       zlog(ZLOG_WARNING, "Found multiple addresses for %s, %s ignored", dup_address, tmpbuf);
                }
        }
 
+       free(dup_address);
        freeaddrinfo(servinfo);
 
        return sock;