1 #ifndef jb_itch5_make_socket_udp_send_hpp 2 #define jb_itch5_make_socket_udp_send_hpp 8 #include <boost/asio/ip/multicast.hpp> 9 #include <boost/asio/ip/udp.hpp> 10 #include <boost/asio/ip/unicast.hpp> 16 template <
typename socket_t>
19 namespace ip = boost::asio::ip;
20 using socket_base = boost::asio::socket_base;
24 auto const r_address = ip::address::from_string(cfg.
address());
27 ip::address local_address = ip::address_v4();
28 if (r_address.is_v6()) {
29 local_address = ip::address_v6();
33 ip::udp::endpoint endpoint(local_address, 0);
35 s.open(endpoint.protocol());
36 s.set_option(socket_base::reuse_address(cfg.
reuse_address()));
41 if (r_address.is_multicast()) {
43 if (cfg.
hops() != -1) {
44 s.set_option(ip::multicast::hops(ip::multicast::hops(cfg.
hops())));
47 if (r_address.is_v4()) {
50 s.set_option(ip::multicast::outbound_interface(local_if));
54 std::ostringstream os;
55 os <<
"Cannot convert outbound-interface value (" 57 throw std::runtime_error(os.str());
59 s.set_option(ip::multicast::outbound_interface(if_index));
63 if (cfg.
hops() != -1) {
64 s.set_option(ip::unicast::hops(ip::unicast::hops(cfg.
hops())));
66 s.set_option(socket_base::broadcast(cfg.
broadcast()));
88 template <
class socket_t = boost::asio::ip::udp::socket>
100 #endif // jb_itch5_make_socket_udp_send_hpp
jb::config_attribute< udp_config_common, bool > reuse_address
socket_t make_socket_udp_send(boost::asio::io_service &io, udp_sender_config const &cfg)
Create a socket to send UDP messages given the configuration parameters.
jb::config_attribute< udp_sender_config, std::string > outbound_interface
jb::config_attribute< udp_sender_config, std::string > address
bool strtonum(std::string const &s, T &r)
Generic string to number conversion with validation.
void make_socket_udp_common(socket_t &s, udp_config_common const &cfg)
Configure a UDP socket.
jb::config_attribute< udp_sender_config, int > hops
jb::config_attribute< udp_sender_config, bool > enable_loopback
A configuration object for UDP senders.
void setup_socket_udp_send(socket_t &s, udp_sender_config const &cfg)
jb::config_attribute< udp_sender_config, bool > broadcast
The top-level namespace for the JayBeams library.