=== modified file 'src/ip/Address.cc'
--- src/ip/Address.cc	2011-07-04 04:28:59 +0000
+++ src/ip/Address.cc	2011-07-22 11:12:06 +0000
@@ -164,44 +164,6 @@
     return true;
 }
 
-bool
-Ip::Address::IsSockAddr() const
-{
-    return (m_SocketAddr.sin6_port != 0);
-}
-
-bool
-Ip::Address::IsIPv4() const
-{
-    return IsAnyAddr() || IsNoAddr() || IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
-}
-
-bool
-Ip::Address::IsIPv6() const
-{
-    return IsAnyAddr() || IsNoAddr() || !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
-}
-
-bool
-Ip::Address::IsAnyAddr() const
-{
-    return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr );
-}
-
-/// NOTE: Does NOT clear the Port stored. Ony the Address and Type.
-void
-Ip::Address::SetAnyAddr()
-{
-    memset(&m_SocketAddr.sin6_addr, 0, sizeof(struct in6_addr) );
-}
-
-/// NOTE: completely empties the Ip::Address structure. Address, Port, Type, everything.
-void
-Ip::Address::SetEmpty()
-{
-    memset(&m_SocketAddr, 0, sizeof(m_SocketAddr) );
-}
-
 #if _SQUID_AIX_
 // Bug 2885 comment 78 explains.
 // In short AIX has a different netinet/in.h union definition
@@ -225,6 +187,45 @@
 #endif
 
 bool
+Ip::Address::IsSockAddr() const
+{
+    return (m_SocketAddr.sin6_port != 0);
+}
+
+bool
+Ip::Address::IsIPv4() const
+{
+    return IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
+}
+
+bool
+Ip::Address::IsIPv6() const
+{
+    return !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
+}
+
+bool
+Ip::Address::IsAnyAddr() const
+{
+    return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr )
+           || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_anyaddr );
+}
+
+/// NOTE: Does NOT clear the Port stored. Ony the Address and Type.
+void
+Ip::Address::SetAnyAddr()
+{
+    memset(&m_SocketAddr.sin6_addr, 0, sizeof(struct in6_addr) );
+}
+
+/// NOTE: completely empties the Ip::Address structure. Address, Port, Type, everything.
+void
+Ip::Address::SetEmpty()
+{
+    memset(&m_SocketAddr, 0, sizeof(m_SocketAddr) );
+}
+
+bool
 Ip::Address::SetIPv4()
 {
     if ( IsLocalhost() ) {
@@ -237,6 +238,11 @@
         return true;
     }
 
+    if ( IsNoAddr() ) {
+        m_SocketAddr.sin6_addr = v4_noaddr;
+        return true;
+    }
+
     if ( IsIPv4())
         return true;
 
@@ -247,7 +253,8 @@
 bool
 Ip::Address::IsLocalhost() const
 {
-    return IN6_IS_ADDR_LOOPBACK( &m_SocketAddr.sin6_addr ) || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_localhost );
+    return IN6_IS_ADDR_LOOPBACK( &m_SocketAddr.sin6_addr )
+           || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_localhost );
 }
 
 void
@@ -279,7 +286,8 @@
 Ip::Address::IsNoAddr() const
 {
     // IFF the address == 0xff..ff (all ones)
-    return IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v6_noaddr );
+    return IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v6_noaddr )
+           || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_noaddr );
 }
 
 void


