forceful server shutdown
This commit is contained in:
30
Cargo.lock
generated
30
Cargo.lock
generated
@ -1,7 +1,35 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "http_server"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"signal-hook",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.171"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.3.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"signal-hook-registry",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
@ -4,4 +4,4 @@ version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
||||
signal-hook = "0.3.17"
|
||||
|
@ -8,7 +8,7 @@ services:
|
||||
container_name: http-server
|
||||
build: .
|
||||
image: http-server:latest
|
||||
restart: no
|
||||
restart: always
|
||||
ports:
|
||||
- 80:8080
|
||||
networks:
|
||||
|
21
src/main.rs
21
src/main.rs
@ -1,7 +1,11 @@
|
||||
use signal_hook::{consts::*, iterator::Signals};
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
error::Error,
|
||||
io::{BufRead, BufReader, Write},
|
||||
net::{TcpListener, TcpStream},
|
||||
process::exit,
|
||||
thread,
|
||||
};
|
||||
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
@ -342,18 +346,29 @@ fn handle_request(mut stream: TcpStream) {
|
||||
// TODO: Act upon the request
|
||||
|
||||
stream
|
||||
.write_all(b"HTTP/1.1 200 OK\r\n\r\nThis is the server speaking\r\n")
|
||||
.write_all(b"HTTP/1.1 200 OK\r\n\r\nHello, World!\r\n")
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn main() -> Result<(), std::io::Error> {
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let mut signals = Signals::new([SIGINT, SIGTERM])?;
|
||||
|
||||
// TODO: Gracefully shutdown server
|
||||
thread::spawn(move || {
|
||||
for sig in signals.forever() {
|
||||
println!("Received signal {:?}", sig);
|
||||
println!("Shutting down");
|
||||
exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
let listener = TcpListener::bind("0.0.0.0:8080")?;
|
||||
|
||||
println!("Server started");
|
||||
|
||||
for stream in listener.incoming() {
|
||||
let stream = stream?;
|
||||
handle_request(stream)
|
||||
handle_request(stream);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user