diff options
| author | Rain <rain@oxide.computer> | 2024-07-27 02:06:58 +0000 |
|---|---|---|
| committer | Rain <rain@sunshowers.io> | 2024-07-27 02:10:24 +0000 |
| commit | 50d127e6ecb83f267fe35321eb14e536b959bb1d (patch) | |
| tree | 7663f0779c89e5d1ab344a28b17d53139d990b8a | |
| parent | 2d5a628a1de1d38318909a710ef37da6251e362e (diff) | |
| download | rust-50d127e6ecb83f267fe35321eb14e536b959bb1d.tar.gz rust-50d127e6ecb83f267fe35321eb14e536b959bb1d.zip | |
[illumos/solaris] set MSG_NOSIGNAL while writing to sockets
Both these platforms have MSG_NOSIGNAL available, and we should set it for socket writes in the event that the SIGPIPE handler has been reset to SIG_DFL (i.e. terminate the process). I've verified via a quick program at https://github.com/sunshowers/msg-nosignal-test/ that even when the SIGPIPE handler is reset to SIG_DFL, writes to closed sockets now error out with EPIPE. (Under ordinary circumstances UDP writes won't cause MSG_NOSIGNAL.)
| -rw-r--r-- | library/std/src/os/unix/net/datagram.rs | 4 | ||||
| -rw-r--r-- | library/std/src/sys_common/net.rs | 1 |
2 files changed, 5 insertions, 0 deletions
diff --git a/library/std/src/os/unix/net/datagram.rs b/library/std/src/os/unix/net/datagram.rs index b29f9099a11..f58f9b4d9ab 100644 --- a/library/std/src/os/unix/net/datagram.rs +++ b/library/std/src/os/unix/net/datagram.rs @@ -20,6 +20,8 @@ use crate::{fmt, io}; target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", + target_os = "solaris", + target_os = "illumos", target_os = "haiku", target_os = "nto", ))] @@ -31,6 +33,8 @@ use libc::MSG_NOSIGNAL; target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", + target_os = "solaris", + target_os = "illumos", target_os = "haiku", target_os = "nto", )))] diff --git a/library/std/src/sys_common/net.rs b/library/std/src/sys_common/net.rs index 95ca67fc2e0..0a82b50ae1a 100644 --- a/library/std/src/sys_common/net.rs +++ b/library/std/src/sys_common/net.rs @@ -42,6 +42,7 @@ cfg_if::cfg_if! { target_os = "hurd", target_os = "dragonfly", target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", + target_os = "solaris", target_os = "illumos", target_os = "haiku", target_os = "nto"))] { use libc::MSG_NOSIGNAL; } else { |
