Struct std::os::unix::net::SocketAddr1.10.0[][src]

pub struct SocketAddr { /* fields omitted */ }
This is supported on Unix only.
Expand description

与 Unix 套接字关联的地址。

Examples

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

let socket = match UnixListener::bind("/tmp/sock") {
    Ok(sock) => sock,
    Err(e) => {
        println!("Couldn't bind: {:?}", e);
        return
    }
};
let addr = socket.local_addr().expect("Couldn't get local address");
Run

Implementations

如果地址未命名,则返回 true

Examples

命名地址:

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

fn main() -> std::io::Result<()> {
    let socket = UnixListener::bind("/tmp/sock")?;
    let addr = socket.local_addr().expect("Couldn't get local address");
    assert_eq!(addr.is_unnamed(), false);
    Ok(())
}
Run

一个未命名的地址:

use std::os::unix::net::UnixDatagram;

fn main() -> std::io::Result<()> {
    let socket = UnixDatagram::unbound()?;
    let addr = socket.local_addr().expect("Couldn't get local address");
    assert_eq!(addr.is_unnamed(), true);
    Ok(())
}
Run

如果它是 pathname 地址,则返回该地址的内容。

Examples

带有路径名:

use std::os::unix::net::UnixListener;
use std::path::Path;

fn main() -> std::io::Result<()> {
    let socket = UnixListener::bind("/tmp/sock")?;
    let addr = socket.local_addr().expect("Couldn't get local address");
    assert_eq!(addr.as_pathname(), Some(Path::new("/tmp/sock")));
    Ok(())
}
Run

没有路径名:

use std::os::unix::net::UnixDatagram;

fn main() -> std::io::Result<()> {
    let socket = UnixDatagram::unbound()?;
    let addr = socket.local_addr().expect("Couldn't get local address");
    assert_eq!(addr.as_pathname(), None);
    Ok(())
}
Run
🔬 This is a nightly-only experimental API. (unix_socket_abstract #85410)
This is supported on Android or Linux only.

如果它是一个没有前导空字节的抽象命名空间,则返回此地址的内容。

Examples
#![feature(unix_socket_abstract)]
use std::os::unix::net::{UnixListener, SocketAddr};

fn main() -> std::io::Result<()> {
    let namespace = b"hidden";
    let namespace_addr = SocketAddr::from_abstract_namespace(&namespace[..])?;
    let socket = UnixListener::bind_addr(&namespace_addr)?;
    let local_addr = socket.local_addr().expect("Couldn't get local address");
    assert_eq!(local_addr.as_abstract_namespace(), Some(&namespace[..]));
    Ok(())
}
Run
🔬 This is a nightly-only experimental API. (unix_socket_abstract #85410)
This is supported on Android or Linux only.

从命名空间创建抽象域套接字地址

与传统的基于路径的 Unix 套接字不同,抽象地址不会创建文件。 这样做的好处是当绑定到它的套接字关闭时,地址将消失,因此不需要清理文件系统。

自动添加抽象命名空间的前导空字节。

这是一个特定于 Linux 的扩展。有关详细信息,请参见 unix(7)

Errors

如果给定的命名空间太长,这将返回一个错误

Examples
#![feature(unix_socket_abstract)]
use std::os::unix::net::{UnixListener, SocketAddr};

fn main() -> std::io::Result<()> {
    let addr = SocketAddr::from_abstract_namespace(b"hidden")?;
    let listener = match UnixListener::bind_addr(&addr) {
        Ok(sock) => sock,
        Err(err) => {
            println!("Couldn't bind: {:?}", err);
            return Err(err);
        }
    };
    Ok(())
}
Run

Trait Implementations

返回值的副本。 Read more

source 执行复制分配。 Read more

使用给定的格式化程序格式化该值。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

获得所有权后的结果类型。

从借用的数据创建拥有的数据,通常是通过克隆。 Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into #41263)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more

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

执行转换。

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

执行转换。