Commit d6f9c77a authored by jan.koester's avatar jan.koester
Browse files

test

parent e4937564
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -1125,14 +1125,17 @@ namespace netplus {

    bool socketwait::isDisconnected(socket &sock) {
        SOCKET fd = sock.fd();
        if (fd < 0) return true;
        struct epoll_event ev{};
        ev.events  = EPOLLIN;
        // A peer FIN normally reports EPOLLIN (readable EOF), not EPOLLHUP.
        // Ask for RDHUP explicitly so a pooled client reconnects before reuse.
        ev.events  = EPOLLIN | EPOLLRDHUP;
        ev.data.fd = fd;
        epoll_ctl(_handle, EPOLL_CTL_ADD, fd, &ev);
        struct epoll_event out;
        if (epoll_ctl(_handle, EPOLL_CTL_ADD, fd, &ev) < 0) return true;
        struct epoll_event out{};
        int r = ::epoll_wait(_handle, &out, 1, 0);
        epoll_ctl(_handle, EPOLL_CTL_DEL, fd, nullptr);
        return r > 0 && (out.events & (EPOLLHUP | EPOLLERR));
        return r < 0 || (r > 0 && (out.events & (EPOLLRDHUP | EPOLLHUP | EPOLLERR)));
    }

    std::shared_ptr<con> lookupConnection(int fd) {