From 0efe801b5d1e0b45cb16d8fdddaa3620d6317073 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sat, 25 May 2019 16:14:31 +0200
Subject: 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.
---
 net/server_epoll.lua | 8 ++++++++
 1 file changed, 8 insertions(+)

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;
-- 
cgit v1.2.3