]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/example/cpp03/multicast/sender.cpp
5 // Copyright (c) 2003-2020 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/bind.hpp"
17 const short multicast_port
= 30001;
18 const int max_message_count
= 10;
23 sender(boost::asio::io_context
& io_context
,
24 const boost::asio::ip::address
& multicast_address
)
25 : endpoint_(multicast_address
, multicast_port
),
26 socket_(io_context
, endpoint_
.protocol()),
30 std::ostringstream os
;
31 os
<< "Message " << message_count_
++;
34 socket_
.async_send_to(
35 boost::asio::buffer(message_
), endpoint_
,
36 boost::bind(&sender::handle_send_to
, this,
37 boost::asio::placeholders::error
));
40 void handle_send_to(const boost::system::error_code
& error
)
42 if (!error
&& message_count_
< max_message_count
)
44 timer_
.expires_after(boost::asio::chrono::seconds(1));
46 boost::bind(&sender::handle_timeout
, this,
47 boost::asio::placeholders::error
));
51 void handle_timeout(const boost::system::error_code
& error
)
55 std::ostringstream os
;
56 os
<< "Message " << message_count_
++;
59 socket_
.async_send_to(
60 boost::asio::buffer(message_
), endpoint_
,
61 boost::bind(&sender::handle_send_to
, this,
62 boost::asio::placeholders::error
));
67 boost::asio::ip::udp::endpoint endpoint_
;
68 boost::asio::ip::udp::socket socket_
;
69 boost::asio::steady_timer timer_
;
74 int main(int argc
, char* argv
[])
80 std::cerr
<< "Usage: sender <multicast_address>\n";
81 std::cerr
<< " For IPv4, try:\n";
82 std::cerr
<< " sender 239.255.0.1\n";
83 std::cerr
<< " For IPv6, try:\n";
84 std::cerr
<< " sender ff31::8000:1234\n";
88 boost::asio::io_context io_context
;
89 sender
s(io_context
, boost::asio::ip::make_address(argv
[1]));
92 catch (std::exception
& e
)
94 std::cerr
<< "Exception: " << e
.what() << "\n";