3 个版本 (1 个稳定版)
1.0.0 | 2020 年 5 月 5 日 |
---|---|
0.1.1 | 2019 年 5 月 21 日 |
0.1.0 | 2019 年 4 月 18 日 |
#27 in #tcp-socket
15KB
250 行
multisock
此 crate 提供了统一的 SocketAddr
、Stream
和 Listener
类型,这些类型可以与 TCP 和 UNIX 套接字一起使用。
许多应用程序并不真正关心它们是否正在连接到 UNIX 或 TCP 服务,它们只是想使用该服务。同样,应用程序可能希望在 UNIX 套接字或 TCP 端口上提供服务。这两种套接字类型之间的区别与应用逻辑中的 IPv4 和 IPv6 之间的区别一样重要——通常不那么重要。然而,libstd 为 IPv4 和 IPv6 套接字提供了统一的类型,但需要为 UNIX 套接字提供单独的类型。此 crate 提供的类型允许编写对套接字类型无关的网络应用程序,这些应用程序将 UNIX 套接字视为与 IPv4 和 IPv6 相同:只是一个运行时配置的问题。
这些类型应与 libstd 中的 SocketAddr
、TcpStream/
UnixStream
和 TcpListener/
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())