diff options
Diffstat (limited to 'libcmix-network/acceptor.cpp')
| -rw-r--r-- | libcmix-network/acceptor.cpp | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/libcmix-network/acceptor.cpp b/libcmix-network/acceptor.cpp index 69b2807..ed640a1 100644 --- a/libcmix-network/acceptor.cpp +++ b/libcmix-network/acceptor.cpp @@ -1,42 +1,26 @@ #include "acceptor.hpp" -#include <boost/asio/ip/tcp.hpp> -#include <boost/asio/ip/v6_only.hpp> -#include <boost/asio/placeholders.hpp> -#include <boost/bind.hpp> +#include "accept.hpp" +#include <boost/asio/ip/v6_only.hpp> using namespace boost::asio; using namespace boost::asio::ip; -void accept_loop(tcp::acceptor& acceptor, std::function<void(tcp::socket&&)> f); - -void accept_connection(tcp::acceptor& acceptor, std::shared_ptr<tcp::socket> socket, boost::system::error_code ec, std::function<void(boost::asio::ip::tcp::socket&&)> f) -{ - if(!bool(ec)) - { - f(std::move(*socket)); - accept_loop(acceptor, f); - } else { - std::stringstream ss; - ss << ec; - throw std::runtime_error(ss.str()); - } -} - -void accept_loop(tcp::acceptor& acceptor, std::function<void(tcp::socket&&)> f) -{ - std::shared_ptr<tcp::socket> new_socket = std::make_shared<tcp::socket>(acceptor.get_io_service()); - - acceptor.async_accept(*new_socket, boost::bind(accept_connection, boost::ref(acceptor), new_socket, boost::asio::placeholders::error, f)); -} - Acceptor::Acceptor(boost::asio::io_service &io_service, boost::asio::ip::address address, uint16_t port) : acceptor(io_service) , endpoint(address, port) {} -void Acceptor::bind_v6_and_v4_any(std::function<void(tcp::socket&&)> accept_handler) { +address Acceptor::get_address() { + return endpoint.address(); +} + +bool Acceptor::is_open() { + return acceptor.is_open(); +} + +void Acceptor::listen_v6_and_v4_any() { acceptor.open(endpoint.protocol()); v6_only option(false); @@ -44,15 +28,22 @@ void Acceptor::bind_v6_and_v4_any(std::function<void(tcp::socket&&)> accept_hand acceptor.bind(endpoint); acceptor.listen(); - - accept_loop(acceptor, accept_handler); } -void Acceptor::setup_listen_socket(std::function<void (tcp::socket &&)> accept_handler) +void Acceptor::listen_socket() { acceptor.open(endpoint.protocol()); acceptor.bind(endpoint); acceptor.listen(); +} +void Acceptor::start_accepting(AcceptHandler accept_handler) { accept_loop(acceptor, accept_handler); } + +void Acceptor::start_accepting(std::shared_ptr<ssl::context> ctx, SSLAcceptHandler accept_handler) +{ + accept_loop(acceptor, ctx, accept_handler); +} + + |
