From owner-p4-projects@FreeBSD.ORG Wed Jun 24 08:28:42 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 189EE1065672; Wed, 24 Jun 2009 08:28:42 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CB892106566C for ; Wed, 24 Jun 2009 08:28:41 +0000 (UTC) (envelope-from jona@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id B9BA58FC1F for ; Wed, 24 Jun 2009 08:28:41 +0000 (UTC) (envelope-from jona@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5O8SfaA055004 for ; Wed, 24 Jun 2009 08:28:41 GMT (envelope-from jona@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5O8SfIU055001 for perforce@freebsd.org; Wed, 24 Jun 2009 08:28:41 GMT (envelope-from jona@FreeBSD.org) Date: Wed, 24 Jun 2009 08:28:41 GMT Message-Id: <200906240828.n5O8SfIU055001@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jona@FreeBSD.org using -f From: Jonathan Anderson To: Perforce Change Reviews Cc: Subject: PERFORCE change 165029 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2009 08:28:42 -0000 http://perforce.freebsd.org/chv.cgi?CH=165029 Change 165029 by jona@jona-trustedbsd-belle-vmware on 2009/06/24 08:28:40 Block SIGPIPE Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/user_angel/server.c#10 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/user_angel/server.c#10 (text+ko) ==== @@ -20,9 +20,7 @@ * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANT# -# -IES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS @@ -39,11 +37,13 @@ #include +#include #include #include #include #include #include +#include #include #include "cap.h" @@ -126,6 +126,19 @@ highest_fd = fd; + + // No SIGPIPE, please + int on = 1; + if(setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on))) + err(EX_IOERR, "Error setting SO_NOSIGPIPE"); + + // Re-use the angel address if the server has recently shut down + if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) + err(EX_IOERR, "Error setting SO_REUSEADRR"); + + + + /* TODO: do this? rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, @@ -245,7 +258,8 @@ if(!d) { - if((errno == ENOENT) || (errno == ECONNRESET) || (errno == EAGAIN)) + if((errno == ENOENT) || (errno == ECONNRESET) || (errno == EAGAIN) + || (errno == EPIPE)) close_client(client, errno, "Client socket closed"); else perror("Error receiving from client"); @@ -453,7 +467,7 @@ FD_CLR(client, &clients); if(client == highest_fd) - while(!FD_ISSET(highest_fd, &clients)) + while(!FD_ISSET(highest_fd, &clients) && (highest_fd >= 0)) highest_fd--; }