epoll con evento desencadenado borde

La página de manual deepoll tiene un código de ejemplo para el borde activado como el siguiente:

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);
        }
    }
}

En la función do_use_fd, llamo a recv sin bloqueo en bucle while hasta EAGAIN, el código de muestra funciona bien.

Tengo una pregunta sobre este código de ejemplo, supongamos que ahora tengo 50 conexiones de clientes de socket, de repente, 10 clientes escriben datos al mismo tiempo, por lo que epoll_wait () devolverá 10 y luego irá a for loop:

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

llamarádo_use_fd(events[n].data.fd); para esos 10 clientes, suponga que n = 5 está hecho y n = 6 aún no está terminado, de repente, la descripción del archivo del evento n = 3 ha recibido nuevos datos, después de que todos esos 10 eventos hayan finalizado y vuelvan a epoll_wait, ¿lo haré? obtener el evento informarme que hay un cliente tiene nuevos datos para leer? o lo extrañaré porque cuando sucedió el evento, ¡el código no está en epoll_wait!

Respuestas a la pregunta(2)

Su respuesta a la pregunta