asyncでなくてもtcpstreamができて、nonblockingの設定もできるみたい。ただ、動かし方がよくわからん…
https://doc.rust-lang.org/std/net/struct.TcpStream.html#method.set_nonblocking
https://doc.rust-lang.org/std/net/struct.TcpListener.html#method.set_nonblocking
TcpStreamは接続で、TcpListenerはbindって理解で合ってるかな?
use std::io::{self, Read};
use std::net::TcpStream;
fn main() {
let mut stream = TcpStream::connect("127.0.0.1:7878");
expect("Couldn't connect to the server");
stream.set_nonblocking(true).expect("set_nonblocking call failed");
let mut buf = vec![];
loop {
match stream.read_to_end(&mut buf) {
Ok(_) => break,
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
wait_for_fd();
}
Err(e) => panic!("encountered IO error: {e}"),
};
};
println!("bytes: {buf:?}");
}