# HG changeset patch # User jbe # Date 1496741791 -7200 # Node ID 981ebb743b3693b59d0fc1f20569fd930d87e887 # Parent 07e7e218d8df6d9869011060f80f6480f8801f9e Support proto = "main" in listen{...} call diff -r 07e7e218d8df -r 981ebb743b36 framework/bin/mcp.lua --- a/framework/bin/mcp.lua Sun May 28 00:30:10 2017 +0200 +++ b/framework/bin/mcp.lua Tue Jun 06 11:36:31 2017 +0200 @@ -352,9 +352,17 @@ assert(args, "No argument passed to listen function") local min_requests_per_fork = args.min_requests_per_fork or 50 local max_requests_per_fork = args.max_requests_per_fork or 200 + local main_handlers = {} local interval_handlers = {} for j, listener in ipairs(args) do - if listener.proto == "interval" then + if listener.proto == "main" then + local name = listener.name or "Unnamed main thread #" .. #main_handlers+1 + if main_handlers[name] ~= nil then + error('Main thread handler with duplicate name "' .. name .. '"') + end + main_handlers[name] = listener.handler + listener.name = name + elseif listener.proto == "interval" then local name = listener.name or "Unnamed interval #" .. #interval_handlers+1 if interval_handlers[name] ~= nil then error('Interval handler with duplicate name "' .. name .. '"') @@ -375,7 +383,11 @@ local outer_handler = http.generate_handler(inner_handler, args.http_options) args.prepare = postfork_init args.connect = function(socket) - if socket.interval then + if socket.main then + request.initialize() + main_handlers[socket.main]() + return false + elseif socket.interval then request_count = request_count + 1 request.initialize() interval_handlers[socket.interval]()