]>
Commit | Line | Data |
---|---|---|
74b04a01 XL |
1 | use hello::ThreadPool; |
2 | use std::fs; | |
3 | use std::io::prelude::*; | |
4 | use std::net::TcpListener; | |
5 | use std::net::TcpStream; | |
6 | use std::thread; | |
7 | use std::time::Duration; | |
8 | ||
9 | // ANCHOR: here | |
10 | fn main() { | |
11 | let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); | |
12 | let pool = ThreadPool::new(4); | |
13 | ||
14 | for stream in listener.incoming().take(2) { | |
15 | let stream = stream.unwrap(); | |
16 | ||
17 | pool.execute(|| { | |
18 | handle_connection(stream); | |
19 | }); | |
20 | } | |
21 | ||
22 | println!("Shutting down."); | |
23 | } | |
24 | // ANCHOR_END: here | |
25 | ||
26 | fn handle_connection(mut stream: TcpStream) { | |
f9f354fc | 27 | let mut buffer = [0; 1024]; |
74b04a01 XL |
28 | stream.read(&mut buffer).unwrap(); |
29 | ||
30 | let get = b"GET / HTTP/1.1\r\n"; | |
31 | let sleep = b"GET /sleep HTTP/1.1\r\n"; | |
32 | ||
33 | let (status_line, filename) = if buffer.starts_with(get) { | |
6a06907d | 34 | ("HTTP/1.1 200 OK", "hello.html") |
74b04a01 XL |
35 | } else if buffer.starts_with(sleep) { |
36 | thread::sleep(Duration::from_secs(5)); | |
6a06907d | 37 | ("HTTP/1.1 200 OK", "hello.html") |
74b04a01 | 38 | } else { |
6a06907d | 39 | ("HTTP/1.1 404 NOT FOUND", "404.html") |
74b04a01 XL |
40 | }; |
41 | ||
42 | let contents = fs::read_to_string(filename).unwrap(); | |
43 | ||
6a06907d XL |
44 | let response = format!( |
45 | "{}\r\nContent-Length: {}\r\n\r\n{}", | |
46 | status_line, | |
47 | contents.len(), | |
48 | contents | |
49 | ); | |
74b04a01 XL |
50 | |
51 | stream.write(response.as_bytes()).unwrap(); | |
52 | stream.flush().unwrap(); | |
53 | } |