@@ -183,7 +183,9 @@ impl<C: Locked + 'static> Application<C> {
183
183
}
184
184
} ) ;
185
185
186
- let server = Server :: bind ( & socket_addr) . serve ( make_service) ;
186
+ let server = Server :: bind ( & socket_addr)
187
+ . serve ( make_service)
188
+ . with_graceful_shutdown ( shutdown_signal ( logger. clone ( ) ) ) ;
187
189
188
190
if let Err ( e) = server. await {
189
191
error ! ( & logger, "server error: {}" , e; "main" => "run" ) ;
@@ -201,7 +203,10 @@ impl<C: Locked + 'static> Application<C> {
201
203
} ) ;
202
204
203
205
// TODO: Find a way to redirect to HTTPS
204
- let mut server = Server :: builder ( listener) . serve ( make_service) ;
206
+ let server = Server :: builder ( listener)
207
+ . serve ( make_service)
208
+ . with_graceful_shutdown ( shutdown_signal ( logger. clone ( ) ) ) ;
209
+ tokio:: pin!( server) ;
205
210
206
211
while let Err ( e) = ( & mut server) . await {
207
212
// This is usually caused by trying to connect on HTTP instead of HTTPS
@@ -273,6 +278,16 @@ pub struct Auth {
273
278
pub chain : primitives:: Chain ,
274
279
}
275
280
281
+ /// A Ctrl+C signal to gracefully shutdown the server
282
+ async fn shutdown_signal ( logger : Logger ) {
283
+ // Wait for the Ctrl+C signal
284
+ tokio:: signal:: ctrl_c ( )
285
+ . await
286
+ . expect ( "failed to install CTRL+C signal handler" ) ;
287
+
288
+ info ! ( & logger, "Received Ctrl+C signal. Shutting down.." )
289
+ }
290
+
276
291
#[ cfg( test) ]
277
292
mod test {
278
293
use serde_json:: json;
0 commit comments