login

<     >

2023-08-26 11:35:06 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

close connection when recv() returns 0

diff --git a/lib/ludweb/tcp.lua b/lib/ludweb/tcp.lua
index c24b29b..2e542fd 100644
--- a/lib/ludweb/tcp.lua
+++ b/lib/ludweb/tcp.lua
@@ -130,7 +130,12 @@ function TCP:run()
                 curfds = curfds + 1
             else
                 local size = C.recv(evs[n].data.fd, buffer, buflen, 0)
-                if size > 0 then
+                if size == 0 then
+                    C.epoll_ctl(efd, C.EPOLL_CTL_DEL, evs[n].data.fd, ev)
+                    C.shutdown(evs[n].data.fd, C.SHUT_RDWR)
+                    C.close(evs[n].data.fd)
+                    curfds = curfds - 1
+                elseif size > 0 then
                     datain[n] = (datain[n] or "") .. ffi.string(buffer, size)
                     if self:request_ready(datain[n]) then
                         local dataout, keep_alive = self:process(datain[n])
@@ -142,8 +147,8 @@ function TCP:run()
                         if not keep_alive then
                             C.epoll_ctl(efd, C.EPOLL_CTL_DEL, evs[n].data.fd, ev)
                             C.shutdown(evs[n].data.fd, C.SHUT_RDWR)
-                            curfds = curfds - 1
                             C.close(evs[n].data.fd)
+                            curfds = curfds - 1
                         end
                         datain[n] = ""
                     end