diff options
| author | Franklin Wei <git@fwei.tk> | 2016-01-02 18:40:29 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-01-02 18:40:29 -0500 |
| commit | 2819d11ceeb1ac739ed5f17ccb0abab63f494299 (patch) | |
| tree | 9041b1aa1212df0208f8f49b78101933ce7d4a3a /src/client.c | |
| parent | 66cdb3d4f427a1978dad56a66c1bf1085939601c (diff) | |
| download | netcosm-2819d11ceeb1ac739ed5f17ccb0abab63f494299.zip netcosm-2819d11ceeb1ac739ed5f17ccb0abab63f494299.tar.gz netcosm-2819d11ceeb1ac739ed5f17ccb0abab63f494299.tar.bz2 netcosm-2819d11ceeb1ac739ed5f17ccb0abab63f494299.tar.xz | |
preliminary refactor of user data management
Diffstat (limited to 'src/client.c')
| -rw-r--r-- | src/client.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/client.c b/src/client.c index 2784987..8591858 100644 --- a/src/client.c +++ b/src/client.c @@ -172,7 +172,9 @@ void sig_rt_0_handler(int s, siginfo_t *info, void *v) } unsigned char cmd; + /* drop this command */ read(from_parent, &cmd, 1); + switch(cmd) { case REQ_BCASTMSG: @@ -211,6 +213,18 @@ void sig_rt_0_handler(int s, siginfo_t *info, void *v) sigqueue(getppid(), SIGRTMIN+1, junk); } +static void sigpipe_handler(int s) +{ + (void) s; + union sigval junk; + /* + * necessary in case we get SIGPIPE in our SIGRTMIN+1 handler, + * the master expects a response from us + */ + sigqueue(getppid(), SIGRTMIN+1, junk); + _exit(0); +} + static void client_change_state(int state) { send_master(REQ_CHANGESTATE, &state, sizeof(state)); @@ -289,7 +303,9 @@ void client_main(int fd, struct sockaddr_in *addr, int total, int to, int from) output_locked = 0; struct sigaction sa; - sa.sa_handler = SIG_DFL; + sigemptyset(&sa.sa_mask); + sa.sa_handler = sigpipe_handler; + sa.sa_flags = SA_RESTART; if(sigaction(SIGPIPE, &sa, NULL) < 0) error("sigaction"); |