virtual int add_interest()

in io/epoll-ng.cpp [182:203]


    virtual int add_interest(Event e) override {
        if (e.fd < 0)
            LOG_ERROR_RETURN(EINVAL, -1, "invalid file descriptor ", e.fd);
        int ret = 0;
        int mod = (e.interests & ONE_SHOT) ? EPOLLONESHOT : 0;
        if (e.interests & EVENT_READ) {
            ret =
                rpoller.add(e.fd, mod | EPOLLIN | EPOLLRDHUP, {.ptr = e.data});
            if (ret < 0) return ret;
        }
        DEFER(if (ret < 0) rpoller.rm(e.fd, 0, {}));
        if (e.interests & EVENT_WRITE) {
            ret = wpoller.add(e.fd, mod | EPOLLOUT, {.ptr = e.data});
            if (ret < 0) return ret;
        }
        DEFER(if (ret < 0) wpoller.rm(e.fd, 0, {}));
        if (e.interests & EVENT_ERROR) {
            ret = epoller.add(e.fd, mod | EPOLLERR, {.ptr = e.data});
            if (ret < 0) return ret;
        }
        return ret;
    }