From 91189212361813b854174225bfa4b1d4fc8ed40b Mon Sep 17 00:00:00 2001 From: jilles Date: Mon, 28 May 2012 19:22:23 +0000 Subject: libfetch: Avoid SIGPIPE on network connections. To avoid unexpected process termination from SIGPIPE when writing to a closed network connection, enable SO_NOSIGPIPE on all network connections. The POSIX standard MSG_NOSIGNAL is not used since it requires modifying all send calls to add this flag. This is particularly nasty for SSL connections. Reviewed by: des Tested by: bapt MFC after: 5 days --- lib/libfetch/common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index 39a8a6b..425b6de 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -209,11 +209,13 @@ conn_t * fetch_reopen(int sd) { conn_t *conn; + int opt = 1; /* allocate and fill connection structure */ if ((conn = calloc(1, sizeof(*conn))) == NULL) return (NULL); fcntl(sd, F_SETFD, FD_CLOEXEC); + setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof opt); conn->sd = sd; ++conn->ref; return (conn); -- cgit v1.1