# HG changeset patch # User Kim Alvefur # Date 1483718508 -3600 # Node ID 4e365403169358ffb89a58140b458710ddb1b727 # Parent 24f99d11b7922787411dbf5f3a4f879884be4fd4 net.server_epoll: Reuse interface metatable for event compat layer diff -r 24f99d11b792 -r 4e3654031693 net/server_epoll.lua --- a/net/server_epoll.lua Thu Jan 05 06:21:31 2017 +0100 +++ b/net/server_epoll.lua Fri Jan 06 17:01:48 2017 +0100 @@ -671,23 +671,23 @@ local function onevent(self) local ret = self:callback(); if ret == -1 then - epoll.ctl("del", fd); + self:setflags(false, false); elseif ret then - epoll.ctl("mod", fd, mode); + self:setflags(mode == "r" or mode == "rw", mode == "w" or mode == "rw"); end end - local conn = { + local conn = setmetatable({ + getfd = function () return fd; end; callback = callback; onreadable = onevent; onwriteable = onevent; - close = function () + close = function (self) + self:setflags(false, false); fds[fd] = nil; - return epoll.ctl("del", fd); end; - }; - fds[fd] = conn; - local ok, err = epoll.ctl("add", fd, mode or "r"); + }, interface_mt); + local ok, err = conn:setflags(mode == "r" or mode == "rw", mode == "w" or mode == "rw"); if not ok then return ok, err; end return conn; end;