20 #ifndef RIPPLE_PEERFINDER_CHECKER_H_INCLUDED
21 #define RIPPLE_PEERFINDER_CHECKER_H_INCLUDED
23 #include <ripple/beast/net/IPAddressConversion.h>
24 #include <boost/asio/detail/handler_invoke_helpers.hpp>
25 #include <boost/asio/io_service.hpp>
26 #include <boost/asio/ip/tcp.hpp>
27 #include <boost/intrusive/list.hpp>
28 #include <boost/system/error_code.hpp>
35 namespace PeerFinder {
38 template <
class Protocol = boost::asio::ip::tcp>
45 boost::intrusive::link_mode <boost::intrusive::normal_link>>
59 template <
class Handler>
84 boost::intrusive::constant_time_size <true>>::type;
94 Checker (boost::asio::io_service& io_service);
121 template <
class Handler>
127 remove (basic_async_op& op);
132 template <
class Protocol>
133 template <
class Handler>
135 boost::asio::io_service& io_service, Handler&& handler)
137 , socket_ (io_service)
138 , handler_ (
std::forward<Handler>(handler))
142 template <
class Protocol>
143 template <
class Handler>
149 template <
class Protocol>
150 template <
class Handler>
158 template <
class Protocol>
159 template <
class Handler>
169 template <
class Protocol>
175 template <
class Protocol>
181 template <
class Protocol>
189 for (
auto& c : list_)
194 template <
class Protocol>
199 while (! list_.empty())
203 template <
class Protocol>
204 template <
class Handler>
209 auto const op = std::make_shared<async_op<Handler>> (
210 *
this, io_service_, std::forward<Handler>(handler));
213 list_.push_back (*op);
216 endpoint),
std::bind (&basic_async_op::operator(), op,
217 std::placeholders::_1));
220 template <
class Protocol>
225 list_.erase (list_.iterator_to (op));
226 if (list_.size() == 0)