-
Notifications
You must be signed in to change notification settings - Fork 14k
Closed
Description
Hello,
I am trying to start a TCP listener using the following code:
use std::rt::io::net::tcp::TcpListener;
use std::rt::io::{Reader, Writer, Listener, Acceptor};
use std::rt::io::net::ip::{SocketAddr, Ipv4Addr};
use std::vec;
use std::str;
fn main() {
let addr = SocketAddr {
ip: Ipv4Addr(0, 0, 0, 0),
port: 9090
};
let mut acceptor = TcpListener::bind(addr).listen().unwrap();
println("Listener is ready");
loop {
let mut stream = acceptor.accept().unwrap();
let mut buf = vec::from_elem(1, 0u8); // Use just 1 byte to debug
loop {
match stream.read(buf) {
Some(count) => {
if count > 0 {
print(str::from_utf8(buf));
} else {
println("GOT NOTHING");
break;
}
}
None => { println("Finished"); break }
}
}
stream.write(bytes!("Hello World\r\n"));
// println(str::from_utf8(buf));
}
}So the problem here is that after the server reads all the data from
the client and then it blocks on the next read waiting for more
data, while the client, in this case curl will not send any more
data.
I tried to use stream.eof but this function is not implemented and
just throws an exception.
What is the recommended way to do this while stream.eof is not
implemented?
Thank you
Metadata
Metadata
Assignees
Labels
No labels