diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/server_epoll.lua | 16 |
1 files 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; |