diff options
Diffstat (limited to 'src/base/serverSelect.c')
| -rw-r--r-- | src/base/serverSelect.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/base/serverSelect.c b/src/base/serverSelect.c index 99505d5..32be485 100644 --- a/src/base/serverSelect.c +++ b/src/base/serverSelect.c @@ -22,6 +22,7 @@ static struct timeval tv; static fd_set readfds; +static fd_set writefds; static int max_fd; void restartSelect() @@ -40,9 +41,9 @@ void restartSelect() max_fd = 0; } -void addSockToSelect(int sock) +void addSockToSelectRead(int sock) { - //printf("addSockToSelect %d\n", sock); + //printf("addSockToSelectRead %d\n", sock); FD_SET(sock, &readfds); @@ -52,6 +53,18 @@ void addSockToSelect(int 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; @@ -62,23 +75,23 @@ int actionSelect() if( listClient->count == 0 ) { - ret = select(max_fd+1, &readfds, (fd_set *)NULL, (fd_set *)NULL, NULL); + ret = select(max_fd+1, &readfds, &writefds, (fd_set *)NULL, NULL); setServerTimer(); } else { - ret = select(max_fd+1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &tv); + ret = select(max_fd+1, &readfds, &writefds, (fd_set *)NULL, &tv); } #endif #ifndef PUBLIC_SERVER - ret = select(max_fd+1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &tv); + ret = select(max_fd+1, &readfds, &writefds, (fd_set *)NULL, &tv); #endif return ret; } -int isChangeSockInSelect(int sock) +int isChangeSockInSelectRead(int sock) { int ret; @@ -88,3 +101,14 @@ int isChangeSockInSelect(int sock) return ret; } + +int isChangeSockInSelectWrite(int sock) +{ + int ret; + + ret = FD_ISSET(sock, &writefds); + + //printf("isChangeSockInSelect %d -> %d\n", sock, ret); + + return ret; +} |