SIGPIPE shall be ignored in most network-related cases.
authorThomas Pornin <pornin@bolet.org>
Sun, 20 Nov 2016 15:23:00 +0000 (16:23 +0100)
committerThomas Pornin <pornin@bolet.org>
Sun, 20 Nov 2016 15:23:00 +0000 (16:23 +0100)
samples/client_basic.c
samples/server_basic.c
tools/client.c
tools/server.c

index d4f79fb..1609f43 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <stdint.h>
 #include <errno.h>
+#include <signal.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -260,6 +261,11 @@ main(int argc, char *argv[])
                path = "/";
        }
 
+       /*
+        * Ignore SIGPIPE to avoid crashing in case of abrupt socket close.
+        */
+       signal(SIGPIPE, SIG_IGN);
+
        /*
         * Open the socket to the target server.
         */
index fdd801e..92c7d42 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <stdint.h>
 #include <errno.h>
+#include <signal.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -278,6 +279,11 @@ main(int argc, char *argv[])
        }
        port = argv[1];
 
+       /*
+        * Ignore SIGPIPE to avoid crashing in case of abrupt socket close.
+        */
+       signal(SIGPIPE, SIG_IGN);
+
        /*
         * Open the server socket.
         */
index 2c2985f..552b7f9 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <stdint.h>
 #include <errno.h>
+#include <signal.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -619,6 +620,11 @@ do_client(int argc, char *argv[])
        br_ssl_engine_set_buffer(&cc.eng, iobuf, iobuf_len, bidi);
        br_ssl_client_reset(&cc, sni, 0);
 
+       /*
+        * We need to avoid SIGPIPE.
+        */
+       signal(SIGPIPE, SIG_IGN);
+
        /*
         * Connect to the peer.
         */
index 71cfa5d..c6978cf 100644 (file)
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <stdint.h>
 #include <errno.h>
+#include <signal.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -1010,6 +1011,11 @@ do_server(int argc, char *argv[])
 
        br_ssl_engine_set_buffer(&cc.eng, iobuf, iobuf_len, bidi);
 
+       /*
+        * We need to ignore SIGPIPE.
+        */
+       signal(SIGPIPE, SIG_IGN);
+
        /*
         * Open the server socket.
         */