static void server(int sock) { char buff[BUF_SIZE + 1]; int actual; t_server server; actual = 0; init_server(&server, sock); while (1) { init_fds(&server, actual); if (select(server.max + 1, &server.rdfs, NULL, NULL, NULL) == -1) exit_error("select"); if (FD_ISSET(STDIN_FILENO, &server.rdfs)) break ; else if (FD_ISSET(server.sock, &server.rdfs)) { if (new_client(&server, &actual, buff) == -1) continue ; } else client_talking(&server, &actual, buff); } clear_clients(server.clients, actual); close(server.sock); }
static int server_select(t_server *server, int *actual) { char buff[BUF_SIZE + 1]; struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 1; if (select(server->max + 1, &server->rdfs, NULL, NULL, &tv) == -1) exit_error("select"); else if (FD_ISSET(server->sock, &server->rdfs)) { if (server_new_client(server, actual, buff)) return (1); } else if (FD_ISSET(server->gfxsock, &server->rdfs)) { if (new_gfxclient(server, buff) == -1) { server->gfx.sock = 0; return (1); } } else client_talking(server, actual, buff); return (0); }