aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2019-05-25 16:14:31 +0200
committerKim Alvefur <zash@zash.se>2019-05-25 16:14:31 +0200
commit2b596d7bd69f1c67a53c8166cc7b59cda3efce17 (patch)
treefc621f8faf59bcdddea293992f076dd1c6b80785 /net
parentd06300c456ad2209a500e64a6efac1094d58bdea (diff)
downloadprosody-2b596d7bd69f1c67a53c8166cc7b59cda3efce17.tar.gz
prosody-2b596d7bd69f1c67a53c8166cc7b59cda3efce17.zip
net.server_epoll: Add experimental option to close connections in case of listener error
Sometimes such errors leave sessions in an inconsistent state, so it might be better to close them early.
Diffstat (limited to 'net')
-rw-r--r--net/server_epoll.lua8
1 files changed, 8 insertions, 0 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index 4061d755..251f91f7 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -61,6 +61,10 @@ local default_config = { __index = {
-- Maximum and minimum amount of time to sleep waiting for events (adjusted for pending timers)
max_wait = 86400;
min_wait = 1e-06;
+
+ -- EXPERIMENTAL
+ -- Whether to kill connections in case of callback errors.
+ fatal_errors = false;
}};
local cfg = default_config.__index;
@@ -162,6 +166,10 @@ function interface:on(what, ...)
local ok, err = pcall(listener, self, ...);
if not ok then
log("error", "Error calling on%s: %s", what, err);
+ if cfg.fatal_errors then
+ log("debug", "Closing %s due to error in listener", self);
+ self:destroy();
+ end
return nil, err;
end
return err;