BOOST_ASSERT( 1 <= answers_list.size() );
     BOOST_ASSERT( resolved_host_address_list != NULL );
 
+    size_t cname_count = 0;
+
     BOOST_FOREACH( shared_ptr<resource_base_t> resource_record, answers_list )
     {
         if ( resource_record )
                     // 'AAAA' resource records carry IPv6 addresses
                     append_resolved_ipv6( resource_record, resolved_host_address_list );
                     break;
+                case boost::net::dns::type_cname:
+                   // 'CNAME' resource records that carry aliases
+                   cname_count++;
                 default:
                     // other types of resource records
                     break;
     size_t answer_list_size = answers_list.size();
     size_t resolve_host_list_size = resolved_host_address_list->size();
     bool size_equal = ( resolve_host_list_size == answer_list_size );
-    bool size_equal_minus_cname = ( resolve_host_list_size == ( answer_list_size - 1 ) );
+    bool size_equal_minus_cname = ( resolve_host_list_size == ( answer_list_size - cname_count ) );
     BOOST_ASSERT( size_equal || size_equal_minus_cname );
 }