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