aboutsummaryrefslogtreecommitdiff
path: root/src/server_reqs.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-01-13 18:08:52 -0500
committerFranklin Wei <git@fwei.tk>2016-01-13 18:08:52 -0500
commitcc9c177672edcc65933b15ba91831bf09bbec023 (patch)
tree1f717027c56e92acaecf2ccf581c83d979b9a461 /src/server_reqs.c
parent06880048df2202b1828e5367b1697aee305a2358 (diff)
downloadnetcosm-cc9c177672edcc65933b15ba91831bf09bbec023.zip
netcosm-cc9c177672edcc65933b15ba91831bf09bbec023.tar.gz
netcosm-cc9c177672edcc65933b15ba91831bf09bbec023.tar.bz2
netcosm-cc9c177672edcc65933b15ba91831bf09bbec023.tar.xz
rewrite everything to use libev0.2
Diffstat (limited to 'src/server_reqs.c')
-rw-r--r--src/server_reqs.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/server_reqs.c b/src/server_reqs.c
index ac53396..10f6ad3 100644
--- a/src/server_reqs.c
+++ b/src/server_reqs.c
@@ -46,9 +46,9 @@ static void req_send_clientinfo(unsigned char *data, size_t datalen,
inet_ntoa(child->addr), child->pid, state[child->state]);
if(sender->pid == child->pid)
- strncat(buf, " [YOU]\n", sizeof(buf));
+ strncat(buf, " [YOU]\n", sizeof(buf) - 1);
else
- strncat(buf, "\n", sizeof(buf));
+ strncat(buf, "\n", sizeof(buf) - 1);
write(sender->outpipe[1], buf, strlen(buf));
}
@@ -167,13 +167,6 @@ static void req_move_room(unsigned char *data, size_t datalen, struct child_data
write(sender->outpipe[1], &status, sizeof(status));
}
-static void send_string(int fd, const char *s)
-{
- size_t len = strlen(s);
- write(fd, &len, sizeof(len));
- write(fd, s, len);
-}
-
static void req_send_user(unsigned char *data, size_t datalen, struct child_data *sender)
{
if(datalen)
@@ -417,9 +410,17 @@ finish:
else
sig_debugf("Unknown PID sent request.\n");
+ /* 5 ms */
+#define ACK_TIMEOUT 5000
+
+ struct timespec timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = ACK_TIMEOUT;
+
while(num_acks_recvd < MIN(num_clients,num_acks_wanted))
{
- sigsuspend(&old);
+ if(sigtimedwait(&old, NULL, &timeout) < 0 && errno == EAGAIN)
+ break;
}
inc_acks = 0;