diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2005-04-01 15:02:12 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2005-04-01 15:02:12 +0000 |
commit | b59e286a197c86b8de9478669fe0936f10b59a48 (patch) | |
tree | 57d06b19d3397ee59903af86d4332faeaa905075 | |
parent | 4300d29a4e8fd5ec45c4ecff069af46880b373be (diff) |
Notes
-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 e196b6d6fabb0..b12809f508afa 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); } |