#include #include #include #include #include #include #include #ifndef __WIN32__ # include # include # include #else # include # include #endif #include "server.h" static struct timeval tv; static fd_set readfds; static fd_set writefds; static int max_fd; void select_restart() { #ifndef PUBLIC_SERVER tv.tv_sec = 0; tv.tv_usec = 0; #endif #ifdef PUBLIC_SERVER tv.tv_sec = 0; tv.tv_usec = 1000; #endif FD_ZERO(&readfds); FD_ZERO(&writefds); max_fd = 0; } void select_add_sock_for_read(int sock) { //printf("select_add_sock_for_read %d\n", sock); FD_SET(sock, &readfds); if (sock > max_fd) { max_fd = sock; } } void select_add_sock_for_write(int sock) { //printf("select_add_sock_for_write %d\n", sock); FD_SET(sock, &writefds); if (sock > max_fd) { max_fd = sock; } } int select_action() { int ret; #ifdef PUBLIC_SERVER list_t *listClient; listClient = server_get_list_clients(); if (listClient->count == 0) { ret = select(max_fd + 1, &readfds, &writefds, (fd_set *) NULL, NULL); server_set_time(); } else { ret = select(max_fd + 1, &readfds, &writefds, (fd_set *) NULL, &tv); } #endif #ifndef PUBLIC_SERVER ret = select(max_fd + 1, &readfds, &writefds, (fd_set *) NULL, &tv); #endif return ret; } int select_is_change_sock_for_read(int sock) { int ret; ret = FD_ISSET(sock, &readfds); //printf("select_is_change_sock %d -> %d\n", sock, ret); return ret; } int select_is_change_sock_for_write(int sock) { int ret; ret = FD_ISSET(sock, &writefds); //printf("select_is_change_sock %d -> %d\n", sock, ret); return ret; }