Struct std::os::unix::net::UnixListener

1.10.0 · source ·
pub struct UnixListener(_);
Available on Unix only.
Expand description

表示 Unix 域套接字服务器的结构体。

Examples

use std::thread;
use std::os::unix::net::{UnixStream, UnixListener};

fn handle_client(stream: UnixStream) {
    // ...
}

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;

    // 接受连接并处理它们,为每个连接产生一个新线程
    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                /* connection succeeded */
                thread::spawn(|| handle_client(stream));
            }
            Err(err) => {
                /* connection failed */
                break;
            }
        }
    }
    Ok(())
}
Run

Implementations§

source§

impl UnixListener

source

pub fn bind<P: AsRef<Path>>(path: P) -> Result<UnixListener>

创建绑定到指定套接字的新 UnixListener

Examples
use std::os::unix::net::UnixListener;

let listener = match UnixListener::bind("/path/to/the/socket") {
    Ok(sock) => sock,
    Err(e) => {
        println!("Couldn't connect: {e:?}");
        return
    }
};
Run
1.70.0 · source

pub fn bind_addr(socket_addr: &SocketAddr) -> Result<UnixListener>

创建绑定到指定 套接字地址 的新 UnixListener

Examples
use std::os::unix::net::{UnixListener};

fn main() -> std::io::Result<()> {
    let listener1 = UnixListener::bind("path/to/socket")?;
    let addr = listener1.local_addr()?;

    let listener2 = match UnixListener::bind_addr(&addr) {
        Ok(sock) => sock,
        Err(err) => {
            println!("Couldn't bind: {err:?}");
            return Err(err);
        }
    };
    Ok(())
}
Run
source

pub fn accept(&self) -> Result<(UnixStream, SocketAddr)>

接受与此侦听器的新传入连接。

该函数将阻塞调用线程,直到建立新的 Unix 连接为止。 建立后,将返回相应的 UnixStream 和远程对等方的地址。

Examples
use std::os::unix::net::UnixListener;

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;

    match listener.accept() {
        Ok((socket, addr)) => println!("Got a client: {addr:?}"),
        Err(e) => println!("accept function failed: {e:?}"),
    }
    Ok(())
}
Run
source

pub fn try_clone(&self) -> Result<UnixListener>

为底层套接字创建一个新的独立的拥有所有权的句柄。

返回的 UnixListener 是与此对象引用相同的套接字的引用。 这两个句柄均可用于接受传入连接,并且在一个侦听器上设置的选项将影响另一个。

Examples
use std::os::unix::net::UnixListener;

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;
    let listener_copy = listener.try_clone().expect("try_clone failed");
    Ok(())
}
Run
source

pub fn local_addr(&self) -> Result<SocketAddr>

返回此侦听器的本地套接字地址。

Examples
use std::os::unix::net::UnixListener;

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;
    let addr = listener.local_addr().expect("Couldn't get local address");
    Ok(())
}
Run
source

pub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>

将套接字移入或移出非阻塞模式。

这将导致 accept 操作变为非阻塞,即立即从其调用中返回。 如果 IO 操作成功,则返回 Ok,并且不需要进一步的操作。 如果 IO 操作无法完成,需要重试,则返回类型为 io::ErrorKind::WouldBlock 的错误。

Examples
use std::os::unix::net::UnixListener;

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;
    listener.set_nonblocking(true).expect("Couldn't set non blocking");
    Ok(())
}
Run
source

pub fn take_error(&self) -> Result<Option<Error>>

返回 SO_ERROR 选项的值。

Examples
use std::os::unix::net::UnixListener;

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/tmp/sock")?;

    if let Ok(Some(err)) = listener.take_error() {
        println!("Got error: {err:?}");
    }
    Ok(())
}
Run
特定于平台

在 Redox 上,它总是返回 None

source

pub fn incoming(&self) -> Incoming<'_>

返回传入连接上的迭代器。

迭代器将永远不会返回 None,也不会产生对等方的 SocketAddr 结构体。

Examples
use std::thread;
use std::os::unix::net::{UnixStream, UnixListener};

fn handle_client(stream: UnixStream) {
    // ...
}

fn main() -> std::io::Result<()> {
    let listener = UnixListener::bind("/path/to/the/socket")?;

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                thread::spawn(|| handle_client(stream));
            }
            Err(err) => {
                break;
            }
        }
    }
    Ok(())
}
Run

Trait Implementations§

1.63.0 · source§

impl AsFd for UnixListener

source§

fn as_fd(&self) -> BorrowedFd<'_>

借用文件描述符。 Read more
source§

impl AsRawFd for UnixListener

source§

fn as_raw_fd(&self) -> RawFd

提取原始文件描述符。 Read more
source§

impl Debug for UnixListener

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
1.63.0 · source§

impl From<OwnedFd> for UnixListener

source§

fn from(fd: OwnedFd) -> UnixListener

从输入类型转换为此类型。
1.63.0 · source§

impl From<UnixListener> for OwnedFd

source§

fn from(listener: UnixListener) -> OwnedFd

从输入类型转换为此类型。
source§

impl FromRawFd for UnixListener

source§

unsafe fn from_raw_fd(fd: RawFd) -> UnixListener

根据给定的原始文件描述符构造 Self 的新实例。 Read more
source§

impl<'a> IntoIterator for &'a UnixListener

§

type Item = Result<UnixStream, Error>

被迭代的元素的类型。
§

type IntoIter = Incoming<'a>

我们将其变成哪种迭代器?
source§

fn into_iter(self) -> Incoming<'a>

从一个值创建一个迭代器。 Read more
source§

impl IntoRawFd for UnixListener

source§

fn into_raw_fd(self) -> RawFd

消费这个对象,返回原始的底层文件描述符。 Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。