3 个版本 (1 个稳定版)

1.0.0 2020 年 5 月 5 日
0.1.1 2019 年 5 月 21 日
0.1.0 2019 年 4 月 18 日

#27 in #tcp-socket

MIT 许可证

15KB
250

multisock

此 crate 提供了统一的 SocketAddrStreamListener 类型,这些类型可以与 TCP 和 UNIX 套接字一起使用。

许多应用程序并不真正关心它们是否正在连接到 UNIX 或 TCP 服务,它们只是想使用该服务。同样,应用程序可能希望在 UNIX 套接字或 TCP 端口上提供服务。这两种套接字类型之间的区别与应用逻辑中的 IPv4 和 IPv6 之间的区别一样重要——通常不那么重要。然而,libstd 为 IPv4 和 IPv6 套接字提供了统一的类型,但需要为 UNIX 套接字提供单独的类型。此 crate 提供的类型允许编写对套接字类型无关的网络应用程序,这些应用程序将 UNIX 套接字视为与 IPv4 和 IPv6 相同:只是一个运行时配置的问题。

这些类型应与 libstd 中的 SocketAddrTcpStream/UnixStreamTcpListener/UnixListener 的行为相同。目前没有对 mio 或 tokio 的支持。

目前不支持 UDP 和数据报套接字。

在 Windows 上,这些类型仅支持 TCP,并且只是 TCP 套接字的轻量级包装。

客户端示例

use multisock::{SocketAddr,Stream};
use std::io::{Write,Result};

// Send the pause command to MPD.
fn mpd_pause(addr: &SocketAddr) -> Result<()> {
    let mut sock = Stream::connect(addr)?;
    sock.write_all(b"pause 1\r\n")?;
    Ok(())
}

// If MPD is listening on a UNIX socket, we can do this:
mpd_pause(&"unix:/var/lib/mpd/socket".parse().unwrap())?;

// Or if it's running on another system in the network:
mpd_pause(&"10.3.3.7:6600".parse().unwrap())

无运行时依赖