summaryrefslogtreecommitdiff
path: root/src/base/serverSelect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/serverSelect.c')
-rw-r--r--src/base/serverSelect.c36
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;
+}