20#ifndef RIPPLE_PEERFINDER_CHECKER_H_INCLUDED
21#define RIPPLE_PEERFINDER_CHECKER_H_INCLUDED
23#include <xrpl/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>
38template <
class Protocol = boost::asio::ip::tcp>
45 : boost::intrusive::list_base_hook<
46 boost::intrusive::link_mode<boost::intrusive::normal_link>>
57 template <
class Handler>
69 boost::asio::io_service& io_service,
83 using list_type =
typename boost::intrusive::make_list<
85 boost::intrusive::constant_time_size<true>>::type;
94 explicit Checker(boost::asio::io_service& io_service);
121 template <
class Handler>
132template <
class Protocol>
133template <
class Handler>
136 boost::asio::io_service& io_service,
139 , socket_(io_service)
144template <
class Protocol>
145template <
class Handler>
151template <
class Protocol>
152template <
class Handler>
160template <
class Protocol>
161template <
class Handler>
170template <
class Protocol>
176template <
class Protocol>
182template <
class Protocol>
190 for (
auto& c : list_)
195template <
class Protocol>
200 while (!list_.empty())
204template <
class Protocol>
205template <
class Handler>
211 auto const op = std::make_shared<async_op<Handler>>(
212 *
this, io_service_, std::forward<Handler>(handler));
215 list_.push_back(*op);
217 op->socket_.async_connect(
219 std::bind(&basic_async_op::operator(), op, std::placeholders::_1));
222template <
class Protocol>
227 list_.erase(list_.iterator_to(op));
228 if (list_.size() == 0)
A version-independent IP address and port combination.
Tests remote listening sockets to make sure they are connectible.
boost::system::error_code error_code
void remove(basic_async_op &op)
std::condition_variable cond_
void stop()
Stop the service.
boost::asio::io_service & io_service_
Checker(boost::asio::io_service &io_service)
~Checker()
Destroy the service.
void async_connect(beast::IP::Endpoint const &endpoint, Handler &&handler)
Performs an async connection test on the specified endpoint.
typename boost::intrusive::make_list< basic_async_op, boost::intrusive::constant_time_size< true > >::type list_type
void wait()
Block until all pending I/O completes.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
static boost::asio::ip::tcp::endpoint to_asio_endpoint(IP::Endpoint const &address)
void operator()(error_code const &ec) override
typename Protocol::endpoint endpoint_type
typename Protocol::socket socket_type
virtual void operator()(error_code const &ec)=0
virtual ~basic_async_op()=default