]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/example/cpp03/multicast/sender.cpp
5 // Copyright (c) 2003-2017 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)
14 #include <boost/asio.hpp>
15 #include "boost/bind.hpp"
16 #include "boost/date_time/posix_time/posix_time_types.hpp"
18 const short multicast_port
= 30001;
19 const int max_message_count
= 10;
24 sender(boost::asio::io_context
& io_context
,
25 const boost::asio::ip::address
& multicast_address
)
26 : endpoint_(multicast_address
, multicast_port
),
27 socket_(io_context
, endpoint_
.protocol()),
31 std::ostringstream os
;
32 os
<< "Message " << message_count_
++;
35 socket_
.async_send_to(
36 boost::asio::buffer(message_
), endpoint_
,
37 boost::bind(&sender::handle_send_to
, this,
38 boost::asio::placeholders::error
));
41 void handle_send_to(const boost::system::error_code
& error
)
43 if (!error
&& message_count_
< max_message_count
)
45 timer_
.expires_from_now(boost::posix_time::seconds(1));
47 boost::bind(&sender::handle_timeout
, this,
48 boost::asio::placeholders::error
));
52 void handle_timeout(const boost::system::error_code
& error
)
56 std::ostringstream os
;
57 os
<< "Message " << message_count_
++;
60 socket_
.async_send_to(
61 boost::asio::buffer(message_
), endpoint_
,
62 boost::bind(&sender::handle_send_to
, this,
63 boost::asio::placeholders::error
));
68 boost::asio::ip::udp::endpoint endpoint_
;
69 boost::asio::ip::udp::socket socket_
;
70 boost::asio::deadline_timer timer_
;
75 int main(int argc
, char* argv
[])
81 std::cerr
<< "Usage: sender <multicast_address>\n";
82 std::cerr
<< " For IPv4, try:\n";
83 std::cerr
<< " sender 239.255.0.1\n";
84 std::cerr
<< " For IPv6, try:\n";
85 std::cerr
<< " sender ff31::8000:1234\n";
89 boost::asio::io_context io_context
;
90 sender
s(io_context
, boost::asio::ip::make_address(argv
[1]));
93 catch (std::exception
& e
)
95 std::cerr
<< "Exception: " << e
.what() << "\n";