|
| 1 | +#[allow(unused_imports)] |
1 | 2 | use hyper::server::conn::AddrIncoming;
|
| 3 | +#[allow(unused_imports)] |
2 | 4 | use hyper::server::Server as HyperServer;
|
3 | 5 | use listenfd::ListenFd;
|
4 | 6 | use std::net::{IpAddr, SocketAddr, TcpListener};
|
5 | 7 | use std::sync::Arc;
|
6 | 8 | use tokio::sync::oneshot::Receiver;
|
7 | 9 |
|
8 | 10 | use crate::handler::{RequestHandler, RequestHandlerOpts};
|
| 11 | +#[cfg(feature = "tls")] |
9 | 12 | use crate::tls::{TlsAcceptor, TlsConfigBuilder};
|
10 | 13 | use crate::{cors, helpers, logger, signals, Settings};
|
11 | 14 | use crate::{service::RouterService, Context, Result};
|
@@ -62,12 +65,15 @@ impl Server {
|
62 | 65 | .enable_all()
|
63 | 66 | .build()?
|
64 | 67 | .block_on(async {
|
| 68 | + tracing::trace!("starting web server"); |
65 | 69 | if let Err(err) = self.start_server(cancel_recv, cancel_fn).await {
|
66 | 70 | tracing::error!("server failed to start up: {:?}", err);
|
67 | 71 | std::process::exit(1)
|
68 | 72 | }
|
69 | 73 | });
|
70 | 74 |
|
| 75 | + tracing::trace!("runtime initialized"); |
| 76 | + |
71 | 77 | Ok(())
|
72 | 78 | }
|
73 | 79 |
|
@@ -215,7 +221,7 @@ impl Server {
|
215 | 221 | });
|
216 | 222 |
|
217 | 223 | // Run the corresponding HTTP Server asynchronously with its given options
|
218 |
| - |
| 224 | + #[cfg(feature = "http2")] |
219 | 225 | if general.http2 {
|
220 | 226 | // HTTP/2 + TLS
|
221 | 227 |
|
@@ -277,50 +283,52 @@ impl Server {
|
277 | 283 |
|
278 | 284 | #[cfg(unix)]
|
279 | 285 | handle.close();
|
280 |
| - } else { |
281 |
| - // HTTP/1 |
282 | 286 |
|
283 |
| - #[cfg(unix)] |
284 |
| - let signals = signals::create_signals() |
285 |
| - .with_context(|| "failed to register termination signals")?; |
286 |
| - #[cfg(unix)] |
287 |
| - let handle = signals.handle(); |
288 |
| - |
289 |
| - tcp_listener |
290 |
| - .set_nonblocking(true) |
291 |
| - .with_context(|| "failed to set TCP non-blocking mode")?; |
292 |
| - |
293 |
| - let server = HyperServer::from_tcp(tcp_listener) |
294 |
| - .unwrap() |
295 |
| - .tcp_nodelay(true) |
296 |
| - .serve(router_service); |
| 287 | + tracing::warn!("termination signal caught, shutting down the server execution"); |
| 288 | + return Ok(()); |
| 289 | + } |
297 | 290 |
|
298 |
| - #[cfg(unix)] |
299 |
| - let server = |
300 |
| - server.with_graceful_shutdown(signals::wait_for_signals(signals, grace_period)); |
301 |
| - #[cfg(windows)] |
302 |
| - let server = server.with_graceful_shutdown(signals::wait_for_ctrl_c( |
303 |
| - _cancel_recv, |
304 |
| - _cancel_fn, |
305 |
| - grace_period, |
306 |
| - )); |
| 291 | + // HTTP/1 |
| 292 | + |
| 293 | + #[cfg(unix)] |
| 294 | + let signals = |
| 295 | + signals::create_signals().with_context(|| "failed to register termination signals")?; |
| 296 | + #[cfg(unix)] |
| 297 | + let handle = signals.handle(); |
| 298 | + |
| 299 | + tcp_listener |
| 300 | + .set_nonblocking(true) |
| 301 | + .with_context(|| "failed to set TCP non-blocking mode")?; |
| 302 | + |
| 303 | + let server = HyperServer::from_tcp(tcp_listener) |
| 304 | + .unwrap() |
| 305 | + .tcp_nodelay(true) |
| 306 | + .serve(router_service); |
| 307 | + |
| 308 | + #[cfg(unix)] |
| 309 | + let server = |
| 310 | + server.with_graceful_shutdown(signals::wait_for_signals(signals, grace_period)); |
| 311 | + #[cfg(windows)] |
| 312 | + let server = server.with_graceful_shutdown(signals::wait_for_ctrl_c( |
| 313 | + _cancel_recv, |
| 314 | + _cancel_fn, |
| 315 | + grace_period, |
| 316 | + )); |
307 | 317 |
|
308 |
| - tracing::info!( |
309 |
| - parent: tracing::info_span!("Server::start_server", ?addr_str, ?threads), |
310 |
| - "listening on http://{}", |
311 |
| - addr_str |
312 |
| - ); |
| 318 | + tracing::info!( |
| 319 | + parent: tracing::info_span!("Server::start_server", ?addr_str, ?threads), |
| 320 | + "listening on http://{}", |
| 321 | + addr_str |
| 322 | + ); |
313 | 323 |
|
314 |
| - tracing::info!("press ctrl+c to shut down the server"); |
| 324 | + tracing::info!("press ctrl+c to shut down the server"); |
315 | 325 |
|
316 |
| - server.await?; |
| 326 | + server.await?; |
317 | 327 |
|
318 |
| - #[cfg(unix)] |
319 |
| - handle.close(); |
320 |
| - } |
| 328 | + #[cfg(unix)] |
| 329 | + handle.close(); |
321 | 330 |
|
322 | 331 | tracing::warn!("termination signal caught, shutting down the server execution");
|
323 |
| - |
324 | 332 | Ok(())
|
325 | 333 | }
|
326 | 334 | }
|
0 commit comments