-
Notifications
You must be signed in to change notification settings - Fork 739
Closed
Description
Mikko from codenomicon reported occasionally seeing SIGPIPE as an unhandled signal in s2nd. SIGPIPE can be generated when we try to write() to the remote end and the remote end has closed. I don't think that libs2n should mask this; our design is to emulate POSIX read()/write(), but we need s2nd and s2nc to be more tolerant of this. Instead of receiving the signal, it would be better to handle the error in the normal ways, with write() or read() returning negative values (or EOF for read()).
Following patch suppresses SIGPIPE:
index b0268c1..0562d53 100644
--- a/bin/s2nd.c
+++ b/bin/s2nd.c
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
+#include <signal.h>
#include <stdio.h>
#include <errno.h>
@@ -117,6 +118,11 @@ int main(int argc, const char *argv[])
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
+ fprintf(stderr, "Error disabling SIGPIPE\n");
+ exit(1);
+ }
+
if ((r = getaddrinfo(argv[1], argv[2], &hints, &ai)) < 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(r));
return -1;
Metadata
Metadata
Assignees
Labels
No labels