@ -103,11 +103,27 @@ public:
}
}
bool connect ( const std : : string & server , const std : : string & port )
bool connect ( const std : : string & server , const std : : string & port )
{
{
boost : : asio : : ip : : tcp : : resolver resolver ( stream . get_io_service ( ) ) ;
using namespace boost : : asio : : ip ;
boost : : asio : : ip : : tcp : : resolver : : query query ( server . c_str ( ) , port . c_str ( ) ) ;
tcp : : resolver resolver ( stream . get_io_service ( ) ) ;
boost : : asio : : ip : : tcp : : resolver : : iterator endpoint_iterator = resolver . resolve ( query ) ;
tcp : : resolver : : iterator endpoint_iterator ;
boost : : asio : : ip : : tcp : : resolver : : iterator end ;
# if BOOST_VERSION >= 104300
try {
# endif
// The default query (flags address_configured) tries IPv6 if
// non-localhost IPv6 configured, and IPv4 if non-localhost IPv4
// configured.
tcp : : resolver : : query query ( server . c_str ( ) , port . c_str ( ) ) ;
endpoint_iterator = resolver . resolve ( query ) ;
# if BOOST_VERSION >= 104300
} catch ( boost : : system : : system_error & e )
{
// If we at first don't succeed, try blanket lookup (IPv4+IPv6 independent of configured interfaces)
tcp : : resolver : : query query ( server . c_str ( ) , port . c_str ( ) , resolver_query_base : : flags ( ) ) ;
endpoint_iterator = resolver . resolve ( query ) ;
}
# endif
boost : : system : : error_code error = boost : : asio : : error : : host_not_found ;
boost : : system : : error_code error = boost : : asio : : error : : host_not_found ;
tcp : : resolver : : iterator end ;
while ( error & & endpoint_iterator ! = end )
while ( error & & endpoint_iterator ! = end )
{
{
stream . lowest_layer ( ) . close ( ) ;
stream . lowest_layer ( ) . close ( ) ;