aboutsummaryrefslogtreecommitdiffstats
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
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.
-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;