5个版本
使用旧版Rust 2015
0.1.5 | 2018年4月13日 |
---|---|
0.1.4 | 2018年4月12日 |
0.1.3 | 2017年12月19日 |
0.1.2 | 2017年12月18日 |
0.1.0 | 2017年10月25日 |
#8 in #socket-io
在 2 个crate中使用
295KB
5K SLoC
socket for rust
Rust套接字库
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
psocket = "0.1"
并将以下内容添加到您的crate根目录
extern crate psocket;
如何使用
use psocket::TcpSocket;
use std::io::prelude::*;
use std::time::{Duration, Instant};
use std::io::ErrorKind;
let listener = TcpSocket::bind("127.0.0.1:1234").unwrap();
let addr = listener.local_addr().unwrap();
let mut stream = TcpSocket::connect(&("localhost", addr.port())).expect("connect error");
stream.set_read_timeout(Some(Duration::from_millis(1000))).expect("set read timeout error");
let mut other_end = listener.accept().unwrap().0;
other_end.write_all(b"hello world").expect("write error");
let mut buf = [0; 11];
stream.read(&mut buf).expect("read error");
assert_eq!(b"hello world", &buf[..]);
let start = Instant::now();
let kind = stream.read(&mut buf).err().expect("expected error").kind();
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
assert!(start.elapsed() > Duration::from_millis(400));
drop(listener);
与Rust TcpStream的区别
提供更多关于套接字的功能
// The func connect remote host asyn
pub fn connect_asyn(addr: &SocketAddr) -> io::Result<TcpSocket>;
// Get the socket fd
pub fn as_raw_socket(&self) -> SOCKET;
// Moves this TCP stream into or out of liner mode.
pub fn set_liner(&self, enable: bool, time: u16) -> io::Result<()>;
// The Method is set stream recv size kernel cache size.
pub fn set_recv_size(&self, size: u32) -> io::Result<()>;
// The Method is set stream send size kernel cache size.
pub fn set_send_size(&self, size: u32) -> io::Result<()>;
// The Method is set tcp stream SO_REUSEADDR.
pub fn set_reuse_addr(&self) -> io::Result<()>;
/// Provide func dtor the object but will not close socket fd.
pub fn unlink(self) -> io::Result<()>;
许可证
许可协议为以下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则任何有意提交以包含在作品中的贡献,如Apache-2.0许可证中定义的,应按上述方式双重许可,不附加任何额外条款或条件。