mirror of
https://github.com/matrix-construct/construct
synced 2024-06-02 18:18:56 +02:00
ircd::net::listener: Add callback-action for proper abstraction.
This commit is contained in:
parent
a98bd357df
commit
02fcdc8635
|
@ -26,6 +26,7 @@ struct ircd::net::listener::acceptor
|
|||
|
||||
std::string name;
|
||||
size_t backlog;
|
||||
listener::callback cb;
|
||||
asio::ssl::context ssl;
|
||||
ip::tcp::endpoint ep;
|
||||
ip::tcp::acceptor a;
|
||||
|
@ -52,6 +53,9 @@ struct ircd::net::listener::acceptor
|
|||
bool interrupt() noexcept;
|
||||
void join() noexcept;
|
||||
|
||||
acceptor(const string_view &name, const json::object &opts);
|
||||
acceptor(const string_view &name,
|
||||
const json::object &opts,
|
||||
listener::callback);
|
||||
|
||||
~acceptor() noexcept;
|
||||
};
|
||||
|
|
|
@ -19,6 +19,7 @@ namespace ircd::net
|
|||
struct ircd::net::listener
|
||||
{
|
||||
struct acceptor;
|
||||
using callback = std::function<void (const std::shared_ptr<socket> &)>;
|
||||
|
||||
IRCD_EXCEPTION(ircd::error, error)
|
||||
|
||||
|
@ -26,7 +27,14 @@ struct ircd::net::listener
|
|||
std::shared_ptr<struct acceptor> acceptor;
|
||||
|
||||
public:
|
||||
explicit listener(const string_view &name, const std::string &options);
|
||||
listener(const string_view &name, const json::object &options);
|
||||
listener(const string_view &name,
|
||||
const json::object &options,
|
||||
callback);
|
||||
|
||||
explicit
|
||||
listener(const string_view &name,
|
||||
const std::string &options,
|
||||
callback);
|
||||
|
||||
~listener() noexcept;
|
||||
};
|
||||
|
|
20
ircd/net.cc
20
ircd/net.cc
|
@ -886,19 +886,21 @@ ircd::net::blocking(const socket &socket)
|
|||
//
|
||||
|
||||
ircd::net::listener::listener(const string_view &name,
|
||||
const std::string &opts)
|
||||
const std::string &opts,
|
||||
callback cb)
|
||||
:listener
|
||||
{
|
||||
name, json::object{opts}
|
||||
name, json::object{opts}, std::move(cb)
|
||||
}
|
||||
{
|
||||
}
|
||||
|
||||
ircd::net::listener::listener(const string_view &name,
|
||||
const json::object &opts)
|
||||
const json::object &opts,
|
||||
callback cb)
|
||||
:acceptor
|
||||
{
|
||||
std::make_shared<struct acceptor>(name, opts)
|
||||
std::make_shared<struct acceptor>(name, opts, std::move(cb))
|
||||
}
|
||||
{
|
||||
// Starts the first asynchronous accept. This has to be done out here after
|
||||
|
@ -935,7 +937,8 @@ ircd::net::listener::acceptor::timeout
|
|||
};
|
||||
|
||||
ircd::net::listener::acceptor::acceptor(const string_view &name,
|
||||
const json::object &opts)
|
||||
const json::object &opts,
|
||||
listener::callback cb)
|
||||
try
|
||||
:name
|
||||
{
|
||||
|
@ -947,6 +950,10 @@ try
|
|||
//boost::asio::ip::tcp::socket::max_connections <-- linkage failed?
|
||||
std::min(opts.get<uint>("backlog", SOMAXCONN), uint(SOMAXCONN))
|
||||
}
|
||||
,cb
|
||||
{
|
||||
std::move(cb)
|
||||
}
|
||||
,ssl
|
||||
{
|
||||
asio::ssl::context::method::sslv23_server
|
||||
|
@ -1199,7 +1206,8 @@ noexcept try
|
|||
|
||||
check_handshake_error(ec, *sock);
|
||||
sock->cancel_timeout();
|
||||
add_client(sock);
|
||||
assert(bool(cb));
|
||||
cb(sock);
|
||||
}
|
||||
catch(const ctx::interrupted &e)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue