epoll com evento acionado por borda

A página do homem deepoll tem um código de exemplo para a borda acionada da seguinte maneira:

for (;;) {
    nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
    if (nfds == -1) {
        perror("epoll_pwait");
        exit(EXIT_FAILURE);
    }

    for (n = 0; n < nfds; ++n) {
        if (events[n].data.fd == listen_sock) {
            conn_sock = accept(listen_sock,
                        (struct sockaddr *) &local, &addrlen);
            if (conn_sock == -1) {
                perror("accept");
                exit(EXIT_FAILURE);
            }
            setnonblocking(conn_sock);
            ev.events = EPOLLIN | EPOLLET;
            ev.data.fd = conn_sock;
            if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,
                    &ev) == -1) {
                perror("epoll_ctl: conn_sock");
                exit(EXIT_FAILURE);
            }
        } else {
            do_use_fd(events[n].data.fd);
        }
    }
}

Na função do_use_fd, eu chamo recong não bloqueado em while loop até EAGAIN, o código de exemplo funciona bem.

Eu tenho uma pergunta sobre este código de exemplo, suponha que agora eu tenho 50 conexões de clientes de soquete, de repente 10 clientes gravam dados ao mesmo tempo, então epoll_wait () retornará 10 e, em seguida, vai para loop:

for (n = 0; n < nfds; ++n)

ele vai ligardo_use_fd(events[n].data.fd); para esses 10 clientes, suponha que n = 5 seja feito, e n = 6 ainda não tenha terminado, de repente a descrição do arquivo do evento n = 3 recebeu novos dados, depois que todos esses 10 eventos estiverem prontos e de volta a epoll_wait, obter o evento informar-me que existe um cliente tem novos dados para ler? ou eu sentirei falta porque quando o evento aconteceu, o código não está em epoll_wait !!

questionAnswers(2)

yourAnswerToTheQuestion