Program Listing for File network_handle_event.c

Return to documentation for file (server/network_handle_event.c)

#include <poll.h>
#include <stdio.h>

#include "client/client.h"
#include "utils/debug.h"
#include "server.h"

void handle_poll(server_t *srv, uint64_t timeout)
{
    int poll_result = poll(srv->cm.server_pfds, srv->cm.count, timeout);

    if (poll_result < 0) {
        if (srv->is_running)
            perror("poll failed");
    }
}

void handle_fds_revents(server_t *srv)
{
    if (srv->cm.server_pfds[0].revents & POLLIN)
        add_client(srv);
    for (size_t i = 1; i < srv->cm.count; i++) {
        if (srv->cm.server_pfds[i].revents & POLLIN)
            read_client(srv, i);
        if (srv->cm.server_pfds[i].revents & POLLOUT)
            write_client(srv, i);
    }
}

void handle_client_disconnection(server_t *srv)
{
    for (size_t i = 1; i < srv->cm.count; i++) {
        if (srv->cm.server_pfds[i].revents & POLLHUP
            || srv->cm.server_pfds[i].revents & POLLERR
        ) {
            remove_client(srv, i);
            i--;
        }
    }
}