diff options
| author | Robert Watson <rwatson@FreeBSD.org> | 2005-03-11 15:06:16 +0000 |
|---|---|---|
| committer | Robert Watson <rwatson@FreeBSD.org> | 2005-03-11 15:06:16 +0000 |
| commit | 35a196154f3aee3cffea9c2f1d2d1ba170be37e2 (patch) | |
| tree | d0fc20ba407901bebe6289147ff19032e831fef5 /sys/kern/sys_socket.c | |
| parent | c9a4ff2582c3e44d022ff1d74d01babc28577f35 (diff) | |
Notes
Diffstat (limited to 'sys/kern/sys_socket.c')
| -rw-r--r-- | sys/kern/sys_socket.c | 8 |
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); } |
