diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | bounce.c | 1 | ||||
-rw-r--r-- | compat.h | 11 | ||||
-rw-r--r-- | dispatch.c | 4 |
4 files changed, 14 insertions, 4 deletions
diff --git a/Makefile b/Makefile index 465a2e9..265781e 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,8 @@ pounce: ${OBJS} ${OBJS}: bounce.h compat.h +dispatch.o: compat.h + tags: *.c *.h ctags -w *.c *.h diff --git a/bounce.c b/bounce.c index 93afbb4..1f29f8c 100644 --- a/bounce.c +++ b/bounce.c @@ -372,6 +372,7 @@ int main(int argc, char *argv[]) { signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); + signal(SIGPIPE, SIG_IGN); signal(SIGINFO, signalHandler); signal(SIGUSR1, signalHandler); diff --git a/compat.h b/compat.h index a874d35..961ece9 100644 --- a/compat.h +++ b/compat.h @@ -17,14 +17,17 @@ #include <stdint.h> #include <stdlib.h> -#ifdef NO_EXPLICIT_BZERO +// libcrypto defines these functions if libc doesn't. void explicit_bzero(void *b, size_t len); -#endif - -#ifdef NO_ARC4RANDOM +size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize); +size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize); uint32_t arc4random(void); void arc4random_buf(void *buf, size_t nbytes); uint32_t arc4random_uniform(uint32_t upper_bound); + +// The default value of SO_RCVLOWAT is 1 anyway... +#ifndef SO_NOSIGPIPE +#define SO_NOSIGPIPE SO_RCVLOWAT #endif #ifndef SIGINFO diff --git a/dispatch.c b/dispatch.c index e52efc7..e80f297 100644 --- a/dispatch.c +++ b/dispatch.c @@ -19,6 +19,7 @@ #include <netdb.h> #include <netinet/in.h> #include <poll.h> +#include <signal.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> @@ -32,6 +33,8 @@ #include <sys/capsicum.h> #endif +#include "compat.h" + static struct { struct pollfd *ptr; size_t len, cap; @@ -231,6 +234,7 @@ int main(int argc, char *argv[]) { if (error) err(EX_IOERR, "listen"); } + signal(SIGPIPE, SIG_IGN); for (;;) { int nfds = poll( event.ptr, event.len, (event.len > binds ? timeout : -1) |