Структура Unix Listener
pub struct UnixListener { /* private fields */ }
net.Unix-сокет, который может принимать подключения от других Unix-сокетов.
Вы можете принять новое подключение с помощью метода accept.
UnixListener можно преобразовать в Stream с помощью UnixListenerStream.
Ошибки
Обратите внимание, что принятие подключения может привести к различным ошибкам, и не все из них обязательно являются фатальными — например, открытие слишком большого количества файловых дескрипторов или закрытие соединения другой стороной во время ожидания в очереди на принятие. Они приведут к завершению потока, если их никак не обработать.
Примеры
use tokio::net::UnixListener;
#[tokio::main]
async fn main() {
let listener = UnixListener::bind("/path/to/the/socket").unwrap();
loop {
match listener.accept().await {
Ok((stream, _addr)) => {
println!("new client!");
}
Err(e) => { /* connection failed */ }
}
}
}Реализации
impl UnixListener
pub fn bind<P>(path: P) -> Result<UnixListener>
Создаёт новый UnixListener, привязанный к указанному пути.
Паника
Эта функция паникует, если вызывается вне контекста среды выполнения с включённым вводом-выводом (IO).
Среда выполнения обычно задаётся неявно, когда эта функция вызывается из future, управляемого средой выполнения tokio, в противном случае среду выполнения можно задать явно с помощью функции Runtime::enter.
pub fn bind_addr(socket_addr: &SocketAddr) -> Result<UnixListener>
Создаёт новый UnixListener, привязанный к указанному адресу.
Паника
Эта функция паникует, если вызывается вне контекста среды выполнения с включённым вводом-выводом (IO).
Среда выполнения обычно задаётся неявно, когда эта функция вызывается из future, управляемого средой выполнения tokio, в противном случае среду выполнения можно задать явно с помощью функции Runtime::enter.
pub fn from_std(listener: UnixListener) -> Result<UnixListener>
Создаёт новый UnixListener из std::os::unix::net::UnixListener.
Эта функция предназначена для оборачивания UnixListener из стандартной библиотеки в эквивалент Tokio.
Примечания
Вызывающая сторона отвечает за то, чтобы слушатель находился в неблокирующем режиме. В противном случае все операции ввода-вывода со слушателем будут блокировать поток, что приведёт к неожиданному поведению. Неблокирующий режим можно установить с помощью set_nonblocking.
Передача слушателя в блокирующем режиме всегда ошибочна, и поведение в этом случае может измениться в будущем. Например, это может вызвать панику.
Примеры
use tokio::net::UnixListener;
use std::os::unix::net::UnixListener as StdUnixListener;
let std_listener = StdUnixListener::bind("/path/to/the/socket")?;
std_listener.set_nonblocking(true)?;
let listener = UnixListener::from_std(std_listener)?;Паника
Эта функция паникует, если вызывается вне контекста среды выполнения с включённым вводом-выводом (IO).
Среда выполнения обычно задаётся неявно, когда эта функция вызывается из future, управляемого средой выполнения tokio, в противном случае среду выполнения можно задать явно с помощью функции Runtime::enter.
pub fn into_std(self) -> Result<UnixListener>
Преобразует tokio::net::UnixListener в std::os::unix::net::UnixListener.
Для возвращённого std::os::unix::net::UnixListener неблокирующий режим будет установлен в true. Используйте set_nonblocking для изменения режима блокировки при необходимости.
Примеры
let tokio_listener = tokio::net::UnixListener::bind("/path/to/the/socket")?;
let std_listener = tokio_listener.into_std()?;
std_listener.set_nonblocking(false)?;pub fn local_addr(&self) -> Result<SocketAddr>
Возвращает локальный адрес сокета этого слушателя.
pub fn take_error(&self) -> Result<Option<Error>>
Возвращает значение параметра SO_ERROR.
pub async fn accept(&self) -> Result<(UnixStream, SocketAddr)>
Принимает новое входящее подключение к этому слушателю.
Безопасность отмены
Этот метод безопасен к отмене. Если метод используется в качестве ветки в tokio::select! и другая ветка завершается первой, гарантируется, что этим методом не было принято никаких новых подключений.
pub fn poll_accept( &self, cx: &mut Context<'_>, ) -> Poll<Result<(UnixStream, SocketAddr)>>
Опрашивает готовность принять новое входящее подключение к этому слушателю.
Если нет подключений для принятия, возвращается Poll::Pending, и текущая задача будет уведомлена вейкером. Обратите внимание, что при многократных вызовах poll_accept только Waker из Context, переданного в самый последний вызов, запланирован на получение пробуждения.
Реализации типажей
impl AsFd for UnixListener
fn as_fd(&self) -> BorrowedFd<'_>
impl AsRawFd for UnixListener
impl Debug for UnixListener
impl TryFrom<UnixListener> for UnixListener
fn try_from(stream: UnixListener) -> Result<Self>
Потребляет stream, возвращая объект ввода-вывода tokio.
Это эквивалентно UnixListener::from_std(stream).
Реализации автоматических типажей (Auto Trait)
impl !Freeze for UnixListener
impl RefUnwindSafe for UnixListener
impl Send for UnixListener
impl Sync for UnixListener
impl Unpin for UnixListener
impl UnsafeUnpin for UnixListener
impl UnwindSafe for UnixListener
Универсальные реализации (Blanket Implementations)
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.UnixListener.html