Skip to content

Commit f923c07

Browse files
committed
Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost
First query in the current way (intelligently determining which network has a non-localhost interface). If this does not succeed, try plain lookup. Needed for testing. Fixes #1827 by always allowing IPv6 to be used.
1 parent deb3572 commit f923c07

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/rpcprotocol.h

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,27 @@ class SSLIOStreamDevice : public boost::iostreams::device<boost::iostreams::bidi
103103
}
104104
bool connect(const std::string& server, const std::string& port)
105105
{
106-
boost::asio::ip::tcp::resolver resolver(stream.get_io_service());
107-
boost::asio::ip::tcp::resolver::query query(server.c_str(), port.c_str());
108-
boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
109-
boost::asio::ip::tcp::resolver::iterator end;
106+
using namespace boost::asio::ip;
107+
tcp::resolver resolver(stream.get_io_service());
108+
tcp::resolver::iterator endpoint_iterator;
109+
#if BOOST_VERSION >= 104300
110+
try {
111+
#endif
112+
// The default query (flags address_configured) tries IPv6 if
113+
// non-localhost IPv6 configured, and IPv4 if non-localhost IPv4
114+
// configured.
115+
tcp::resolver::query query(server.c_str(), port.c_str());
116+
endpoint_iterator = resolver.resolve(query);
117+
#if BOOST_VERSION >= 104300
118+
} catch(boost::system::system_error &e)
119+
{
120+
// If we at first don't succeed, try blanket lookup (IPv4+IPv6 independent of configured interfaces)
121+
tcp::resolver::query query(server.c_str(), port.c_str(), resolver_query_base::flags());
122+
endpoint_iterator = resolver.resolve(query);
123+
}
124+
#endif
110125
boost::system::error_code error = boost::asio::error::host_not_found;
126+
tcp::resolver::iterator end;
111127
while (error && endpoint_iterator != end)
112128
{
113129
stream.lowest_layer().close();

0 commit comments

Comments
 (0)