Структура Unix Socket
pub struct UnixSocket { /* private fields */ }
net.Сокет Unix, который ещё не был преобразован в UnixStream, UnixDatagram или UnixListener.
UnixSocket оборачивает сокет операционной системы и позволяет вызывающему коду настроить его перед установлением соединения или приёмом входящих соединений. Вызывающий код может задать параметр сокета и явно привязать сокет к адресу.
Базовый сокет закрывается при удалении значения UnixSocket.
UnixSocket следует использовать напрямую только в том случае, если конфигурация по умолчанию, используемая UnixStream::connect, UnixDatagram::bind и UnixListener::bind, не подходит для нужного сценария.
Вызов UnixStream::connect(path) фактически выполняет ту же функцию, что и:
use tokio::net::UnixSocket;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("bind_path");
let socket = UnixSocket::new_stream()?;
let stream = socket.connect(path).await?;
Ok(())
}Вызов UnixDatagram::bind(path) фактически выполняет ту же функцию, что и:
use tokio::net::UnixSocket;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("bind_path");
let socket = UnixSocket::new_datagram()?;
socket.bind(path)?;
let datagram = socket.datagram()?;
Ok(())
}Вызов UnixListener::bind(path) фактически выполняет ту же функцию, что и:
use tokio::net::UnixSocket;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("bind_path");
let socket = UnixSocket::new_stream()?;
socket.bind(path)?;
let listener = socket.listen(1024)?;
Ok(())
}Параметры сокета, явно не предоставляемые UnixSocket, можно задать, получив доступ к RawFd/RawSocket с помощью AsRawFd/AsRawSocket и задав параметр с помощью такого пакета, как socket2.
Реализации
impl UnixSocket
pub fn new_datagram() -> Result<UnixSocket>
Создаёт новый сокет Unix для дейтаграмм.
Вызывает socket(2) с AF_UNIX и SOCK_DGRAM.
Возвращает
В случае успеха возвращается только что созданный UnixSocket. Если возникает ошибка, вместо него возвращается она.
pub fn new_stream() -> Result<UnixSocket>
Создаёт новый потоковый сокет Unix.
Вызывает socket(2) с AF_UNIX и SOCK_STREAM.
Возвращает
В случае успеха возвращается только что созданный UnixSocket. Если возникает ошибка, вместо него возвращается она.
pub fn bind(&self, path: impl AsRef<Path>) -> Result<()>
Привязывает сокет к указанному адресу.
Вызывает функцию операционной системы bind(2).
pub fn listen(self, backlog: u32) -> Result<UnixListener>
Преобразует сокет в UnixListener.
backlog задаёт максимальное количество ожидающих подключений, которые операционная система может одновременно держать в очереди. Подключения удаляются из очереди с помощью UnixListener::accept. Когда очередь заполнена, операционная система начинает отклонять подключения.
Вызов этой функции для сокета, созданного с помощью new_datagram, вернёт ошибку.
Вызывает функцию операционной системы listen(2), помечая сокет как пассивный.
pub async fn connect(self, path: impl AsRef<Path>) -> Result<UnixStream>
Устанавливает соединение Unix с узлом по указанному адресу сокета.
UnixSocket используется. После установки соединения возвращается подключённый UnixStream. Если подключиться не удаётся, возвращается возникшая ошибка.
Вызов этой функции для сокета, созданного с помощью new_datagram, вернёт ошибку.
Вызывает функцию операционной системы connect(2).
pub fn datagram(self) -> Result<UnixDatagram>
Преобразует сокет в UnixDatagram.
Вызов этой функции для сокета, созданного с помощью new_stream, вернёт ошибку.
Реализации трейтов
impl AsFd for UnixSocket
fn as_fd(&self) -> BorrowedFd<'_>
impl AsRawFd for UnixSocket
impl Debug for UnixSocket
impl FromRawFd for UnixSocket
unsafe fn from_raw_fd(fd: RawFd) -> UnixSocket
Self из указанного исходного файлового дескриптора. Подробнее
impl IntoRawFd for UnixSocket
fn into_raw_fd(self) -> RawFd
Автоматические реализации трейтов
impl Freeze for UnixSocket
impl RefUnwindSafe for UnixSocket
impl Send for UnixSocket
impl Sync for UnixSocket
impl Unpin for UnixSocket
impl UnsafeUnpin for UnixSocket
impl UnwindSafe for UnixSocket
Обобщённые реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу, возвращая обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/net/struct.UnixSocket.html