Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Mar 2013 16:02:49 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r248651 - stable/9/lib/libc/net
Message-ID:  <201303231602.r2NG2ne6089757@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sat Mar 23 16:02:49 2013
New Revision: 248651
URL: http://svnweb.freebsd.org/changeset/base/248651

Log:
  MFC r248252: libc: Avoid SIGPIPE when nscd closes the connection
  unexpectedly.
  
  It is almost always a bug if nscd closes the connection unexpectedly but
  programs should not be killed with SIGPIPE for it.

Modified:
  stable/9/lib/libc/net/nscachedcli.c
Directory Properties:
  stable/9/lib/libc/   (props changed)

Modified: stable/9/lib/libc/net/nscachedcli.c
==============================================================================
--- stable/9/lib/libc/net/nscachedcli.c	Sat Mar 23 15:50:34 2013	(r248650)
+++ stable/9/lib/libc/net/nscachedcli.c	Sat Mar 23 16:02:49 2013	(r248651)
@@ -75,9 +75,10 @@ safe_write(struct cached_connection_ *co
 		nevents = _kevent(connection->write_queue, NULL, 0, &eventlist,
 		    1, &timeout);
 		if ((nevents == 1) && (eventlist.filter == EVFILT_WRITE)) {
-			s_result = _write(connection->sockfd, data + result,
+			s_result = _sendto(connection->sockfd, data + result,
 			    eventlist.data < data_size - result ?
-			    eventlist.data : data_size - result);
+			    eventlist.data : data_size - result, MSG_NOSIGNAL,
+			    NULL, 0);
 			if (s_result == -1)
 				return (-1);
 			else
@@ -175,8 +176,8 @@ send_credentials(struct cached_connectio
 	nevents = _kevent(connection->write_queue, NULL, 0, &eventlist, 1,
 	    NULL);
 	if (nevents == 1 && eventlist.filter == EVFILT_WRITE) {
-		result = (_sendmsg(connection->sockfd, &cred_hdr, 0) == -1) ?
-		    -1 : 0;
+		result = (_sendmsg(connection->sockfd, &cred_hdr,
+		    MSG_NOSIGNAL) == -1) ?  -1 : 0;
 		EV_SET(&eventlist, connection->sockfd, EVFILT_WRITE, EV_ADD,
 		    0, 0, NULL);
 		_kevent(connection->write_queue, &eventlist, 1, NULL, 0, NULL);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303231602.r2NG2ne6089757>