[plugin] HttpInspector: avoid crash when port can't be bound (#13421)

See <https://github.com/koreader/koreader/issues/13420#issuecomment-2726311224>.
This commit is contained in:
Frans de Jonge
2025-03-15 18:03:44 +01:00
committed by GitHub
parent 1193bd38c1
commit 5a92aa2b51
2 changed files with 19 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
local socket = require("socket")
local logger = require("logger")
local _ = require("gettext")
local T = require("ffi/util").template
-- Reference:
-- https://lunarmodules.github.io/luasocket/tcp.html
@@ -23,7 +25,11 @@ function SimpleTCPServer:new(o)
end
function SimpleTCPServer:start()
self.server = socket.bind(self.host, self.port)
local server, err = socket.bind(self.host, self.port)
if not server then
return false, (err and T(_("Failed to bind socket: %1"), err) or _("Failed to bind socket"))
end
self.server = server
self.server:settimeout(0.01) -- set timeout (10ms)
logger.dbg("SimpleTCPServer: Server listening on port " .. self.port)
end

View File

@@ -100,10 +100,18 @@ function HttpInspector:start()
port = self.port,
receiveCallback = function(data, id) return self:onRequest(data, id) end,
}
self.http_socket:start()
self.http_messagequeue = UIManager:insertZMQ(self.http_socket)
logger.dbg("HttpInspector: Server listening on port " .. self.port)
local ok, err = self.http_socket:start()
if ok then
self.http_messagequeue = UIManager:insertZMQ(self.http_socket)
logger.dbg("HttpInspector: Server listening on port " .. self.port)
else
logger.err("HttpInspector: Failed to start server:", err)
self.http_socket = nil
local InfoMessage = require("ui/widget/infomessage")
UIManager:show(InfoMessage:new{
text = T(_("Failed to start HTTP inspector on port %1."), self.port) .. "\n\n" .. err,
})
end
end
function HttpInspector:stop()