From e12753d2ec9db83ec08bb9db63902a82fb245cdd Mon Sep 17 00:00:00 2001 From: "Tomas Chvatal (scarabeus)" Date: Wed, 22 Oct 2008 22:50:54 +0200 Subject: X --- src/base/serverSelect.c~ | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/base/serverSelect.c~ (limited to 'src/base/serverSelect.c~') diff --git a/src/base/serverSelect.c~ b/src/base/serverSelect.c~ new file mode 100644 index 0000000..2b25a4f --- /dev/null +++ b/src/base/serverSelect.c~ @@ -0,0 +1,115 @@ + +#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 restartSelect() +{ +#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 addSockToSelectRead(int sock) +{ + //printf("addSockToSelectRead %d\n", sock); + + FD_SET(sock, &readfds); + + if( sock > max_fd ) + { + max_fd = sock; + } +} + +void addSockToSelectWrite(int sock) +{ + //printf("addSockToSelectWrite %d\n", sock); + + FD_SET(sock, &writefds); + + if(sock > max_fd ) + { + max_fd = sock; + } +} + +int actionSelect() +{ + int ret; + +#ifdef PUBLIC_SERVER + list_t *listClient; + listClient = getListServerClient(); + + if( listClient->count == 0 ) + { + ret = select(max_fd+1, &readfds, &writefds, (fd_set *)NULL, NULL); + setServerTimer(); + } + 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 isChangeSockInSelectRead(int sock) +{ + int ret; + + ret = FD_ISSET(sock, &readfds); + + //printf("isChangeSockInSelect %d -> %d\n", sock, ret); + + return ret; +} + +int isChangeSockInSelectWrite(int sock) +{ + int ret; + + ret = FD_ISSET(sock, &writefds); + + //printf("isChangeSockInSelect %d -> %d\n", sock, ret); + + return ret; +} -- cgit v1.2.3