summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xmake/modules/private/service/server.lua9
1 files changed, 9 insertions, 0 deletions
diff --git a/xmake/modules/private/service/server.lua b/xmake/modules/private/service/server.lua
index 56441ef30..d627076d7 100644
--- a/xmake/modules/private/service/server.lua
+++ b/xmake/modules/private/service/server.lua
@@ -67,6 +67,15 @@ end
-- run main loop
function server:runloop()
assert(self._HANDLER, "no handler found!")
+
+ -- ensure only one server process
+ local lockfile = os.tmpfile(tostring(self)) .. ".lock"
+ local lock = io.openlock(lockfile)
+ if not lock:trylock() then
+ raise("%s: has been started!", self)
+ end
+
+ -- run loop
local sock = socket.bind(self:addr(), self:port())
sock:listen(100)
print("%s: listening %s:%d ..", self, self:addr(), self:port())