42 using boost::asio::ip::udp;
48 UDP::UDP(std::string bind_host, uint16_t bind_port, std::string remote_host, uint16_t remote_port,
50 Comm(message_handler),
51 bind_host_(bind_host),
52 bind_port_(bind_port),
53 remote_host_(remote_host),
54 remote_port_(remote_port),
66 return socket_.is_open();
73 udp::resolver resolver(io_service_);
75 bind_endpoint_ = *resolver.resolve({udp::v4(), bind_host_,
"",
76 boost::asio::ip::resolver_query_base::numeric_service});
77 bind_endpoint_.port(bind_port_);
79 remote_endpoint_ = *resolver.resolve({udp::v4(), remote_host_,
"",
80 boost::asio::ip::resolver_query_base::numeric_service});
81 remote_endpoint_.port(remote_port_);
83 socket_.open(udp::v4());
84 socket_.bind(bind_endpoint_);
86 socket_.set_option(udp::socket::reuse_address(
true));
87 socket_.set_option(udp::socket::send_buffer_size(WRITE_BUFFER_SIZE*1024));
88 socket_.set_option(udp::socket::receive_buffer_size(READ_BUFFER_SIZE*1024));
90 catch (boost::system::system_error e)
92 message_handler_.error(e.what());
104 void UDP::do_async_read(
const boost::asio::mutable_buffers_1 &buffer,
105 boost::function<
void(
const boost::system::error_code&,
size_t)> handler)
107 socket_.async_receive_from(buffer, remote_endpoint_, handler);
110 void UDP::do_async_write(
const boost::asio::const_buffers_1 &buffer,
111 boost::function<
void(
const boost::system::error_code&,
size_t)> handler)
113 socket_.async_send_to(buffer, remote_endpoint_, handler);
UDP(std::string bind_host=DEFAULT_BIND_HOST, uint16_t bind_port=DEFAULT_BIND_PORT, std::string remote_host=DEFAULT_REMOTE_HOST, uint16_t remote_port=DEFAULT_REMOTE_PORT, MessageHandler &message_handler=default_message_handler_)
Bind a UDP socket.
Abstract base class for an asynchronous communication port.
Abstract base class for message handler.