{
BOOST_ASSERT( !HostDnsAddress.empty() );
- struct in_addr dummy_conversion;
-
- // Convert string to IP address
- // Note: IPv4 only
- if ( inet_aton(HostDnsAddress.c_str(), &dummy_conversion) != 0 )
+ try
{
- std::list<HostAddress> new_host_list;
+ // Convert string to IP address
+ // Work with both IPv4 and IPv6
+ address addr = address::from_string( HostDnsAddress );
- HostAddress ip_host( HostDnsAddress, 86400 * 365); // set fake TTL to one year
- new_host_list.push_back( ip_host );
+ if ( addr.is_v4() || addr.is_v6() )
+ {
+ std::list<HostAddress> new_host_list;
- // Activate new host list
- ResolvedHostAddressList.swap( new_host_list );
+ HostAddress ip_host( HostDnsAddress, 86400 * 365 ); // set fake TTL to one year
+ new_host_list.push_back( ip_host );
- GlobalLogger.info() << "host is already an IP: " << HostDnsAddress << endl;
+ // Activate new host list
+ ResolvedHostAddressList.swap( new_host_list );
- return true;
+ GlobalLogger.info() << "Host is already an IP: " << HostDnsAddress << endl;
+
+ return true;
+ }
+ }
+ catch ( const boost::system::system_error & ex )
+ {
+ GlobalLogger.info() << "Host is not an IP: " << HostDnsAddress << endl;
}
return false;