Leverage kernel copy for UnixStream
UDS can be a sendfile destination, just like TCP sockets.
This commit is contained in:
parent
eda4c63fdc
commit
59874516fa
@ -56,6 +56,7 @@ use crate::mem::ManuallyDrop;
|
|||||||
use crate::net::TcpStream;
|
use crate::net::TcpStream;
|
||||||
use crate::os::unix::fs::FileTypeExt;
|
use crate::os::unix::fs::FileTypeExt;
|
||||||
use crate::os::unix::io::{AsRawFd, FromRawFd, RawFd};
|
use crate::os::unix::io::{AsRawFd, FromRawFd, RawFd};
|
||||||
|
use crate::os::unix::net::UnixStream;
|
||||||
use crate::process::{ChildStderr, ChildStdin, ChildStdout};
|
use crate::process::{ChildStderr, ChildStdin, ChildStdout};
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
use crate::sync::atomic::{AtomicBool, Ordering};
|
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 {
|
impl CopyWrite for ChildStdin {
|
||||||
fn properties(&self) -> CopyParams {
|
fn properties(&self) -> CopyParams {
|
||||||
CopyParams(FdMeta::Pipe, Some(self.as_raw_fd()))
|
CopyParams(FdMeta::Pipe, Some(self.as_raw_fd()))
|
||||||
|
Loading…
Reference in New Issue
Block a user