mirror of
https://github.com/matrix-construct/construct
synced 2024-11-25 16:22:35 +01:00
modules/s_listen: Allow connections only after runlevel RUN; add log msgs.
This commit is contained in:
parent
aeea524ac9
commit
0c3bf20d33
1 changed files with 32 additions and 1 deletions
|
@ -18,6 +18,7 @@ static bool load_listener(const m::event &);
|
||||||
extern "C" bool unload_listener(const string_view &name);
|
extern "C" bool unload_listener(const string_view &name);
|
||||||
extern "C" bool load_listener(const string_view &name);
|
extern "C" bool load_listener(const string_view &name);
|
||||||
static void init_listeners();
|
static void init_listeners();
|
||||||
|
static void on_run();
|
||||||
static void on_unload();
|
static void on_unload();
|
||||||
static void on_load();
|
static void on_load();
|
||||||
|
|
||||||
|
@ -27,6 +28,13 @@ IRCD_MODULE
|
||||||
"Server listeners", on_load, on_unload
|
"Server listeners", on_load, on_unload
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ircd::run::changed
|
||||||
|
_on_run{[](const auto &level)
|
||||||
|
{
|
||||||
|
if(level == run::level::RUN)
|
||||||
|
on_run();
|
||||||
|
}};
|
||||||
|
|
||||||
/// Active listener state
|
/// Active listener state
|
||||||
decltype(listeners)
|
decltype(listeners)
|
||||||
listeners;
|
listeners;
|
||||||
|
@ -55,9 +63,28 @@ on_load()
|
||||||
void
|
void
|
||||||
on_unload()
|
on_unload()
|
||||||
{
|
{
|
||||||
|
log::debug
|
||||||
|
{
|
||||||
|
"Clearing %zu listeners...",
|
||||||
|
listeners.size()
|
||||||
|
};
|
||||||
|
|
||||||
listeners.clear();
|
listeners.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
on_run()
|
||||||
|
{
|
||||||
|
log::debug
|
||||||
|
{
|
||||||
|
"Allowing %zu listeners to accept connections...",
|
||||||
|
listeners.size()
|
||||||
|
};
|
||||||
|
|
||||||
|
for(auto &listener : listeners)
|
||||||
|
listener.start();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
init_listeners()
|
init_listeners()
|
||||||
{
|
{
|
||||||
|
@ -159,7 +186,7 @@ load_listener(const m::event &event)
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
_listener_proffer(net::listener &,
|
_listener_proffer(net::listener &listener,
|
||||||
const net::ipport &ipport)
|
const net::ipport &ipport)
|
||||||
{
|
{
|
||||||
if(unlikely(ircd::run::level != ircd::run::level::RUN))
|
if(unlikely(ircd::run::level != ircd::run::level::RUN))
|
||||||
|
@ -174,6 +201,10 @@ _listener_proffer(net::listener &,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sets the asynchronous handler for the next accept. We can play with
|
||||||
|
// delaying this call under certain conditions to provide flow control.
|
||||||
|
listener.start();
|
||||||
|
|
||||||
if(unlikely(client::map.size() >= size_t(client::settings::max_client)))
|
if(unlikely(client::map.size() >= size_t(client::settings::max_client)))
|
||||||
{
|
{
|
||||||
log::warning
|
log::warning
|
||||||
|
|
Loading…
Reference in a new issue