aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--http.c2
-rw-r--r--server.c20
2 files changed, 20 insertions, 2 deletions
diff --git a/http.c b/http.c
index 501499b..d843bb5 100644
--- a/http.c
+++ b/http.c
@@ -496,6 +496,8 @@ static int rw_error(const int r, bool *const close)
{
switch (errno)
{
+ case EPIPE:
+ /* Fall through. */
case ECONNRESET:
*close = true;
return 1;
diff --git a/server.c b/server.c
index a561bfb..afecf3a 100644
--- a/server.c
+++ b/server.c
@@ -167,7 +167,17 @@ static volatile sig_atomic_t do_exit;
static void handle_signal(const int signum)
{
- do_exit = 1;
+ switch (signum)
+ {
+ case SIGINT:
+ /* Fall through. */
+ case SIGTERM:
+ do_exit = 1;
+ break;
+
+ default:
+ break;
+ }
}
struct server_client *server_poll(struct server *const s, bool *const io,
@@ -286,7 +296,13 @@ static int init_signals(void)
}
else if (sigaction(SIGTERM, &sa, NULL))
{
- fprintf(stderr, "%s: sigaction(2) SIGINT: %s\n",
+ fprintf(stderr, "%s: sigaction(2) SIGTERM: %s\n",
+ __func__, strerror(errno));
+ return -1;
+ }
+ else if (sigaction(SIGPIPE, &sa, NULL))
+ {
+ fprintf(stderr, "%s: sigaction(2) SIGPIPE: %s\n",
__func__, strerror(errno));
return -1;
}