]>
git.proxmox.com Git - rustc.git/blob - src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs
6 io
::{prelude::*, BufReader}
,
7 net
::{TcpListener, TcpStream}
,
13 let listener
= TcpListener
::bind("127.0.0.1:7878").unwrap();
14 let pool
= ThreadPool
::new(4);
16 for stream
in listener
.incoming() {
17 let stream
= stream
.unwrap();
20 handle_connection(stream
);
25 fn handle_connection(mut stream
: TcpStream
) {
26 let buf_reader
= BufReader
::new(&mut stream
);
27 let request_line
= buf_reader
.lines().next().unwrap().unwrap();
29 let (status_line
, filename
) = match &request_line
[..] {
30 "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
31 "GET /sleep HTTP/1.1" => {
32 thread
::sleep(Duration
::from_secs(5));
33 ("HTTP/1.1 200 OK", "hello.html")
35 _
=> ("HTTP/1.1 404 NOT FOUND", "404.html"),
38 let contents
= fs
::read_to_string(filename
).unwrap();
39 let length
= contents
.len();
42 format
!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
44 stream
.write_all(response
.as_bytes()).unwrap();