summaryrefslogtreecommitdiff
path: root/sys/kern/sys_socket.c
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2005-03-11 15:06:16 +0000
committerRobert Watson <rwatson@FreeBSD.org>2005-03-11 15:06:16 +0000
commit35a196154f3aee3cffea9c2f1d2d1ba170be37e2 (patch)
treed0fc20ba407901bebe6289147ff19032e831fef5 /sys/kern/sys_socket.c
parentc9a4ff2582c3e44d022ff1d74d01babc28577f35 (diff)
Notes
Diffstat (limited to 'sys/kern/sys_socket.c')
-rw-r--r--sys/kern/sys_socket.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index e196b6d6fabb..b12809f508af 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -39,8 +39,11 @@ __FBSDID("$FreeBSD$");
#include <sys/file.h>
#include <sys/filedesc.h>
#include <sys/mac.h>
+#include <sys/proc.h>
#include <sys/protosw.h>
#include <sys/sigio.h>
+#include <sys/signal.h>
+#include <sys/signalvar.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/filio.h> /* XXX */
@@ -114,6 +117,11 @@ soo_write(fp, uio, active_cred, flags, td)
#endif
error = so->so_proto->pr_usrreqs->pru_sosend(so, 0, uio, 0, 0, 0,
uio->uio_td);
+ if (error == EPIPE && (so->so_options & SO_NOSIGPIPE) == 0) {
+ PROC_LOCK(uio->uio_td->td_proc);
+ psignal(uio->uio_td->td_proc, SIGPIPE);
+ PROC_UNLOCK(uio->uio_td->td_proc);
+ }
NET_UNLOCK_GIANT();
return (error);
}