]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/example/cpp03/services/daytime_client.cpp
5 // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
11 #include <boost/asio.hpp>
12 #include <boost/bind/bind.hpp>
16 using boost::asio::ip::tcp
;
18 char read_buffer
[1024];
20 void read_handler(const boost::system::error_code
& e
,
21 std::size_t bytes_transferred
, tcp::socket
* s
)
25 std::cout
.write(read_buffer
, bytes_transferred
);
27 s
->async_read_some(boost::asio::buffer(read_buffer
),
28 boost::bind(read_handler
, boost::asio::placeholders::error
,
29 boost::asio::placeholders::bytes_transferred
, s
));
33 boost::asio::execution_context
& context
= boost::asio::query(
34 s
->get_executor(), boost::asio::execution::context
);
35 services::logger
logger(context
, "read_handler");
37 std::string msg
= "Read error: ";
43 void connect_handler(const boost::system::error_code
& e
, tcp::socket
* s
)
45 boost::asio::execution_context
& context
= boost::asio::query(
46 s
->get_executor(), boost::asio::execution::context
);
47 services::logger
logger(context
, "connect_handler");
51 logger
.log("Connection established");
53 s
->async_read_some(boost::asio::buffer(read_buffer
),
54 boost::bind(read_handler
, boost::asio::placeholders::error
,
55 boost::asio::placeholders::bytes_transferred
, s
));
59 std::string msg
= "Unable to establish connection: ";
65 int main(int argc
, char* argv
[])
71 std::cerr
<< "Usage: daytime_client <host>" << std::endl
;
75 boost::asio::io_context io_context
;
77 // Set the name of the file that all logger instances will use.
78 services::logger
logger(io_context
, "");
79 logger
.use_file("log.txt");
81 // Resolve the address corresponding to the given host.
82 tcp::resolver
resolver(io_context
);
83 tcp::resolver::results_type endpoints
=
84 resolver
.resolve(argv
[1], "daytime");
86 // Start an asynchronous connect.
87 tcp::socket
socket(io_context
);
88 boost::asio::async_connect(socket
, endpoints
,
89 boost::bind(connect_handler
,
90 boost::asio::placeholders::error
, &socket
));
92 // Run the io_context until all operations have finished.
95 catch (std::exception
& e
)
97 std::cerr
<< e
.what() << std::endl
;