asio
asio copied to clipboard
asio::connect not compatible EndpointSequence pointing to values convertible to Endpoint
Version: Boost develop System: Ubuntu 22.04, clang-18, Debug, C++20
The following fails:
#include <boost/asio/connect.hpp>
#include <boost/asio/generic/stream_protocol.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
namespace asio = boost::asio;
int main()
{
asio::io_context ctx;
asio::ip::tcp::resolver resolv(ctx);
asio::generic::stream_protocol::socket sock(ctx);
auto eps = resolv.resolve("www.example.com", "80");
asio::connect(sock, eps);
}
With the following error:
[build] In file included from /home/ruben/workspace/boost-root/libs/mysql/example/tutorial.cpp:3:
[build] In file included from /home/ruben/workspace/boost-root/libs/asio/include/boost/asio/generic/stream_protocol.hpp:25:
[build] /home/ruben/workspace/boost-root/libs/asio/include/boost/asio/generic/basic_endpoint.hpp:72:22: error: no member named 'data' in 'boost::asio::ip::basic_resolver_entry<boost::asio::ip::tcp>'
[build] 72 | : impl_(endpoint.data(), endpoint.size(), endpoint.protocol().protocol())
[build] | ~~~~~~~~ ^
[build] /home/ruben/workspace/boost-root/libs/asio/include/boost/asio/impl/connect.hpp:246:17: note: in instantiation of function template specialization 'boost::asio::generic::basic_endpoint<boost::asio::generic::stream_protocol>::basic_endpoint<boost::asio::ip::basic_resolver_entry<boost::asio::ip::tcp>>' requested here
[build] 246 | s.connect(*iter, ec);
[build] | ^
[build] /home/ruben/workspace/boost-root/libs/asio/include/boost/asio/impl/connect.hpp:99:7: note: in instantiation of function template specialization 'boost::asio::connect<boost::asio::generic::stream_protocol, boost::asio::any_io_executor, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp>, boost::asio::detail::default_connect_condition>' requested here
[build] 99 | connect(s, endpoints.begin(), endpoints.end(),
[build] | ^
[build] /home/ruben/workspace/boost-root/libs/asio/include/boost/asio/impl/connect.hpp:86:40: note: in instantiation of function template specialization 'boost::asio::connect<boost::asio::generic::stream_protocol, boost::asio::any_io_executor, boost::asio::ip::basic_resolver_results<boost::asio::ip::tcp>>' requested here
[build] 86 | typename Protocol::endpoint result = connect(s, endpoints, ec);
[build] | ^
[build] /home/ruben/workspace/boost-root/libs/mysql/example/tutorial.cpp:17:11: note: in instantiation of function template specialization 'boost::asio::connect<boost::asio::generic::stream_protocol, boost::asio::any_io_executor, boost::asio::ip::basic_resolver_results<boost::asio::ip::tcp>>' requested here
[build] 17 | asio::connect(sock, eps);
[build] | ^
From the documentation, I think this should work, as resolver entries have an operator endpoint_type
. Looks like connect
(and I guess async_connect
) are missing a cast to the endpoint type.