about summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile2
-rw-r--r--bounce.c1
-rw-r--r--compat.h11
-rw-r--r--dispatch.c4
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)