From 3c6c798435a4197ea3d07db09ee5df58a1216b26 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 6 Jan 2017 17:01:48 +0100 Subject: net.server_epoll: Reuse interface metatable for event compat layer --- net/server_epoll.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/server_epoll.lua b/net/server_epoll.lua index 0f340560..086c8dfc 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -671,23 +671,23 @@ return { 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; -- cgit v1.2.3