summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2012-05-28 19:22:23 +0000
committerjilles <jilles@FreeBSD.org>2012-05-28 19:22:23 +0000
commit91189212361813b854174225bfa4b1d4fc8ed40b (patch)
tree6ad2d76d23e78dafac29a1688be3ff266847b2ae
parenta5dc20080124f6200697b06bf11a3acbde236d1e (diff)
downloadFreeBSD-src-91189212361813b854174225bfa4b1d4fc8ed40b.zip
FreeBSD-src-91189212361813b854174225bfa4b1d4fc8ed40b.tar.gz
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
-rw-r--r--lib/libfetch/common.c2
1 files changed, 2 insertions, 0 deletions
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);
OpenPOWER on IntegriCloud