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

获取 self 的 TypeId。 Read more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

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

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

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

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

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

执行转换。

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

执行转换。