diff options
| author | Nicolas Koch <nioko1337@googlemail.com> | 2020-12-01 14:45:36 +0100 |
|---|---|---|
| committer | Nicolas Koch <nioko1337@googlemail.com> | 2020-12-01 14:45:36 +0100 |
| commit | 59874516fae2abd97539c2c50601302c6b61ee0f (patch) | |
| tree | f6b013ec7f81f03023bb204de032a345098f0396 /library/std/src/sys/unix/kernel_copy.rs | |
| parent | eda4c63fdcfe4717ade45333b90bd1568ebcc949 (diff) | |
| download | rust-59874516fae2abd97539c2c50601302c6b61ee0f.tar.gz rust-59874516fae2abd97539c2c50601302c6b61ee0f.zip | |
Leverage kernel copy for UnixStream
UDS can be a sendfile destination, just like TCP sockets.
Diffstat (limited to 'library/std/src/sys/unix/kernel_copy.rs')
| -rw-r--r-- | library/std/src/sys/unix/kernel_copy.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/library/std/src/sys/unix/kernel_copy.rs b/library/std/src/sys/unix/kernel_copy.rs index 1dc16ef0993..f08c828ecff 100644 --- a/library/std/src/sys/unix/kernel_copy.rs +++ b/library/std/src/sys/unix/kernel_copy.rs @@ -56,6 +56,7 @@ use crate::mem::ManuallyDrop; use crate::net::TcpStream; use crate::os::unix::fs::FileTypeExt; use crate::os::unix::io::{AsRawFd, FromRawFd, RawFd}; +use crate::os::unix::net::UnixStream; use crate::process::{ChildStderr, ChildStdin, ChildStdout}; use crate::ptr; use crate::sync::atomic::{AtomicBool, Ordering}; @@ -320,6 +321,34 @@ impl CopyWrite for &TcpStream { } } +impl CopyRead for UnixStream { + fn properties(&self) -> CopyParams { + // avoid the stat syscall since we can be fairly sure it's a socket + CopyParams(FdMeta::Socket, Some(self.as_raw_fd())) + } +} + +impl CopyRead for &UnixStream { + fn properties(&self) -> CopyParams { + // avoid the stat syscall since we can be fairly sure it's a socket + CopyParams(FdMeta::Socket, Some(self.as_raw_fd())) + } +} + +impl CopyWrite for UnixStream { + fn properties(&self) -> CopyParams { + // avoid the stat syscall since we can be fairly sure it's a socket + CopyParams(FdMeta::Socket, Some(self.as_raw_fd())) + } +} + +impl CopyWrite for &UnixStream { + fn properties(&self) -> CopyParams { + // avoid the stat syscall since we can be fairly sure it's a socket + CopyParams(FdMeta::Socket, Some(self.as_raw_fd())) + } +} + impl CopyWrite for ChildStdin { fn properties(&self) -> CopyParams { CopyParams(FdMeta::Pipe, Some(self.as_raw_fd())) |
