=== modified file 'src/ip/Address.cc' --- src/ip/Address.cc 2011-07-04 04:28:59 +0000 +++ src/ip/Address.cc 2011-07-25 14:28:42 +0000 @@ -173,19 +173,19 @@ bool Ip::Address::IsIPv4() const { - return IsAnyAddr() || IsNoAddr() || IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); + return IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); } bool Ip::Address::IsIPv6() const { - return IsAnyAddr() || IsNoAddr() || !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); + return !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); } bool Ip::Address::IsAnyAddr() const { - return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr ); + 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. @@ -237,6 +237,11 @@ return true; } + if ( IsNoAddr() ) { + m_SocketAddr.sin6_addr = v4_noaddr; + return true; + } + if ( IsIPv4()) return true; @@ -279,7 +284,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