]> git.proxmox.com Git - rustc.git/blame - src/doc/book/listings/ch20-web-server/listing-20-07/src/main.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / src / doc / book / listings / ch20-web-server / listing-20-07 / src / main.rs
CommitLineData
923072b8
FG
1use std::{
2 fs,
3 io::{prelude::*, BufReader},
4 net::{TcpListener, TcpStream},
5};
74b04a01
XL
6
7fn main() {
8 let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
9
10 for stream in listener.incoming() {
11 let stream = stream.unwrap();
12
13 handle_connection(stream);
14 }
15}
16
17fn handle_connection(mut stream: TcpStream) {
923072b8
FG
18 let buf_reader = BufReader::new(&mut stream);
19 let request_line = buf_reader.lines().next().unwrap().unwrap();
74b04a01 20
923072b8 21 if request_line == "GET / HTTP/1.1" {
04454e1e 22 let status_line = "HTTP/1.1 200 OK";
74b04a01 23 let contents = fs::read_to_string("hello.html").unwrap();
923072b8 24 let length = contents.len();
74b04a01 25
f9f354fc 26 let response = format!(
923072b8 27 "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
f9f354fc 28 );
74b04a01 29
923072b8 30 stream.write_all(response.as_bytes()).unwrap();
74b04a01
XL
31 // ANCHOR: here
32 // --snip--
33 } else {
6a06907d 34 let status_line = "HTTP/1.1 404 NOT FOUND";
74b04a01 35 let contents = fs::read_to_string("404.html").unwrap();
923072b8 36 let length = contents.len();
74b04a01 37
6a06907d 38 let response = format!(
923072b8 39 "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
6a06907d 40 );
74b04a01 41
923072b8 42 stream.write_all(response.as_bytes()).unwrap();
74b04a01
XL
43 }
44 // ANCHOR_END: here
45}