]> granicus.if.org Git - php/commitdiff
Fixed Bug #68420 listen=9000 listens to ipv6 localhost instead of all addresses
authorRemi Collet <remi@php.net>
Sat, 15 Nov 2014 07:08:23 +0000 (08:08 +0100)
committerRemi Collet <remi@php.net>
Sat, 15 Nov 2014 07:08:23 +0000 (08:08 +0100)
Restore default behavior when no address configured:
Listen on all IPv4 addresses.

At some time we could consider to switch to all IPv6
but this will be a BC break.

sapi/fpm/fpm/fpm_sockets.c

index 3e4f09c50fb0e3c7f7b96bc6d768b0bf12f59a21..9d9def35c7c1c3aa8ee4d91706520ec214744e84 100644 (file)
@@ -274,13 +274,23 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
                return -1;
        }
 
-       // strip brackets from address for getaddrinfo
-       if (addr != NULL) {
-               addr_len = strlen(addr);
-               if (addr[0] == '[' && addr[addr_len - 1] == ']') {
-                       addr[addr_len - 1] = '\0';
-                       addr++;
-               }
+       if (!addr) {
+               /* no address: default documented behavior, all IPv4 addresses */
+               struct sockaddr_in sa_in;
+
+               memset(&sa_in, 0, sizeof(sa_in));
+               sa_in.sin_family = AF_INET;
+               sa_in.sin_port = htons(port);
+               sa_in.sin_addr.s_addr = htonl(INADDR_ANY);
+               free(dup_address);
+               return fpm_sockets_get_listening_socket(wp, (struct sockaddr *) &sa_in, sizeof(struct sockaddr_in));
+       }
+
+       /* strip brackets from address for getaddrinfo */
+       addr_len = strlen(addr);
+       if (addr[0] == '[' && addr[addr_len - 1] == ']') {
+               addr[addr_len - 1] = '\0';
+               addr++;
        }
 
        memset(&hints, 0, sizeof hints);