Skip to content

Instantly share code, notes, and snippets.

@ksqsf
Created January 26, 2018 14:18
Show Gist options
  • Save ksqsf/6fd8afedbebcbcd32d20f31a6216eb51 to your computer and use it in GitHub Desktop.
Save ksqsf/6fd8afedbebcbcd32d20f31a6216eb51 to your computer and use it in GitHub Desktop.
an echo server in Rust
use std::net::{TcpListener, TcpStream};
use std::io::prelude::*;
use std::io::{BufReader, Result, Write};
use std::thread;
fn handle_client(mut stream: TcpStream) -> Result<()> {
thread::spawn(move || {
println!("A new thread spawned for {:?}", stream);
let mut reader = BufReader::new(stream.try_clone().unwrap());
let mut buffer = String::new();
loop {
buffer.clear();
reader.read_line(&mut buffer).unwrap();
stream.write(buffer.as_bytes()).unwrap();
}
});
Ok(())
}
fn serve() -> Result<()> {
let listener = TcpListener::bind("127.0.0.1:65534")?;
for client in listener.incoming() {
match handle_client(client?) {
Ok(()) => continue,
Err(why) => {
println!("Couldn't handle the request: {}", why)
}
}
}
Ok(())
}
fn main() {
match serve() {
Err(why) => println!("FATAL: {}", why),
_ => return (),
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment