]>
git.proxmox.com Git - rustc.git/blob - src/doc/book/listings/ch20-web-server/no-listing-08-final-code/src/bin/main.rs
3 use std
::io
::prelude
::*;
4 use std
::net
::TcpListener
;
5 use std
::net
::TcpStream
;
7 use std
::time
::Duration
;
10 let listener
= TcpListener
::bind("127.0.0.1:7878").unwrap();
11 let pool
= ThreadPool
::new(4);
13 for stream
in listener
.incoming() {
14 let stream
= stream
.unwrap();
17 handle_connection(stream
);
21 println
!("Shutting down.");
24 fn handle_connection(mut stream
: TcpStream
) {
25 let mut buffer
= [0; 1024];
26 stream
.read(&mut buffer
).unwrap();
28 let get
= b
"GET / HTTP/1.1\r\n";
29 let sleep
= b
"GET /sleep HTTP/1.1\r\n";
31 let (status_line
, filename
) = if buffer
.starts_with(get
) {
32 ("HTTP/1.1 200 OK", "hello.html")
33 } else if buffer
.starts_with(sleep
) {
34 thread
::sleep(Duration
::from_secs(5));
35 ("HTTP/1.1 200 OK", "hello.html")
37 ("HTTP/1.1 404 NOT FOUND", "404.html")
40 let contents
= fs
::read_to_string(filename
).unwrap();
42 let response
= format
!(
43 "{}\r\nContent-Length: {}\r\n\r\n{}",
49 stream
.write(response
.as_bytes()).unwrap();
50 stream
.flush().unwrap();