diff options
author | jilles <jilles@FreeBSD.org> | 2012-05-28 19:22:23 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2012-05-28 19:22:23 +0000 |
commit | 91189212361813b854174225bfa4b1d4fc8ed40b (patch) | |
tree | 6ad2d76d23e78dafac29a1688be3ff266847b2ae | |
parent | a5dc20080124f6200697b06bf11a3acbde236d1e (diff) | |
download | FreeBSD-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.c | 2 |
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); |