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.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http_server"
|
name = "http_server"
|
||||||
version = "0.1.0"
|
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"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
signal-hook = "0.3.17"
|
||||||
|
@ -8,7 +8,7 @@ services:
|
|||||||
container_name: http-server
|
container_name: http-server
|
||||||
build: .
|
build: .
|
||||||
image: http-server:latest
|
image: http-server:latest
|
||||||
restart: no
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 80:8080
|
- 80:8080
|
||||||
networks:
|
networks:
|
||||||
|
21
src/main.rs
21
src/main.rs
@ -1,7 +1,11 @@
|
|||||||
|
use signal_hook::{consts::*, iterator::Signals};
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
|
error::Error,
|
||||||
io::{BufRead, BufReader, Write},
|
io::{BufRead, BufReader, Write},
|
||||||
net::{TcpListener, TcpStream},
|
net::{TcpListener, TcpStream},
|
||||||
|
process::exit,
|
||||||
|
thread,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Debug)]
|
#[derive(PartialEq, Eq, Debug)]
|
||||||
@ -342,18 +346,29 @@ fn handle_request(mut stream: TcpStream) {
|
|||||||
// TODO: Act upon the request
|
// TODO: Act upon the request
|
||||||
|
|
||||||
stream
|
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();
|
.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")?;
|
let listener = TcpListener::bind("0.0.0.0:8080")?;
|
||||||
|
|
||||||
println!("Server started");
|
println!("Server started");
|
||||||
|
|
||||||
for stream in listener.incoming() {
|
for stream in listener.incoming() {
|
||||||
let stream = stream?;
|
let stream = stream?;
|
||||||
handle_request(stream)
|
handle_request(stream);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user