10 #include <ThirdPartyWarningsDisable.h>
11 #include <boost/asio/ip/tcp.hpp>
13 #include <ThirdPartyWarningsRestore.h>
43 template<
typename ConnectCompletionHandler>
44 void async_connect(
const std::string& host,
const unsigned short port, ConnectCompletionHandler&& handler)
46 using DnsQuery = boost::asio::ip::tcp::resolver::query;
47 using TcpResolver = boost::asio::ip::tcp::resolver;
48 using EndpointIterator = TcpResolver::iterator;
50 auto query = DnsQuery(host ==
"localhost" ?
"127.0.0.1" : host, std::to_string(port));
51 #if defined(MLAB_CMAKE_BUILDSYSTEM)
54 #if BOOST_VERSION >= 107000
55 #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
57 #define GET_IO_SERVICE(s) ((s).get_io_service())
60 auto resolver = std::make_shared<TcpResolver>(GET_IO_SERVICE(socket));
62 auto resolver = std::make_shared<TcpResolver>(socket.get_io_service());
66 resolver->async_resolve(query,
67 [
this, handler, resolver](
const ErrorCode& ec_resolve,
const EndpointIterator& iterator) {
69 socket.async_connect(iterator->endpoint(), handler);
#define ASYNCHRONOUSIO_EXPORT
Abstract base class for an asynchronous channel supporting read and write of binary data.
std::function< void(const ErrorCode &, const std::size_t)> CompletionHandler
A TCP acceptor listening on a given port and interface address.
A TCP socket class implementing the asio::Socket interface.
std::shared_ptr< Context > context
void async_write(const void *buffer, const std::size_t buffer_size, const CompletionHandler &handler) override
void async_connect(const std::string &host, const unsigned short port, ConnectCompletionHandler &&handler)
TcpSocket(const TcpSocket &)=delete
void async_read(void *buffer, const std::size_t buffer_size, const CompletionHandler &handler) override
boost::asio::ip::tcp::socket socket
TcpSocket(std::shared_ptr< Context > context)
bool is_valid() const override
TcpSocket & operator=(const TcpSocket &)=delete
boost::system::error_code ErrorCode