From: Ilia Alshanetsky Date: Mon, 4 May 2009 13:09:15 +0000 (+0000) Subject: Fixed bug #48131 (Don't try to bind ipv4 addresses to ipv6 ips via bindto) X-Git-Tag: php-5.3.0RC2~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c9195e48de318d06d381951aa618413572a58c0;p=php Fixed bug #48131 (Don't try to bind ipv4 addresses to ipv6 ips via bindto) --- diff --git a/main/network.c b/main/network.c index e5d2f595bc..4a2a6db74c 100644 --- a/main/network.c +++ b/main/network.c @@ -792,9 +792,14 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short switch (sa->sa_family) { #if HAVE_GETADDRINFO && HAVE_IPV6 case AF_INET6: - ((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family; - ((struct sockaddr_in6 *)sa)->sin6_port = htons(port); - socklen = sizeof(struct sockaddr_in6); + if (strstr(bindto, ':')) { + ((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family; + ((struct sockaddr_in6 *)sa)->sin6_port = htons(port); + socklen = sizeof(struct sockaddr_in6); + } else { + socklen = 0; + sa = NULL; + } break; #endif case AF_INET: @@ -814,7 +819,7 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short if (bindto) { struct sockaddr *local_address = NULL; int local_address_len = 0; - + if (sa->sa_family == AF_INET) { struct sockaddr_in *in4 = emalloc(sizeof(struct sockaddr_in));