From be6cc34caf5dfedaa95d54215396cf3703a59d9b Mon Sep 17 00:00:00 2001 From: Aaron Weiss Date: Sun, 21 Dec 2014 16:23:48 -0500 Subject: [PATCH] Server programs no longer exit immediately. --- examples/server.rs | 3 ++- src/server/mod.rs | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/examples/server.rs b/examples/server.rs index 128993b1..85ebc0f1 100644 --- a/examples/server.rs +++ b/examples/server.rs @@ -52,6 +52,7 @@ fn echo(mut req: Request, mut res: Response) { fn main() { let server = Server::http(Ipv4Addr(127, 0, 0, 1), 1337); - server.listen(echo).unwrap(); + let mut listening = server.listen(echo).unwrap(); println!("Listening on http://127.0.0.1:1337"); + listening.await(); } diff --git a/src/server/mod.rs b/src/server/mod.rs index 29ff0bdf..3f338b2b 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -3,7 +3,7 @@ use std::io::{Listener, EndOfFile, BufferedReader, BufferedWriter}; use std::io::net::ip::{IpAddr, Port, SocketAddr}; use std::os; use std::sync::{Arc, TaskPool}; -use std::thread::Builder; +use std::thread::{Builder, JoinGuard}; pub use self::request::Request; @@ -68,7 +68,7 @@ impl, S: NetworkStream, A: NetworkAcceptor> Server, S: NetworkStream, A: NetworkAcceptor> Server, S: NetworkStream, A: NetworkAcceptor> Server { acceptor: A, + guard: Option>, /// The socket addresses that the server is bound to. pub socket: SocketAddr, } impl, S: NetworkStream> Listening { + /// Causes the current thread to wait for this listening to complete. + pub fn await(&mut self) { + if let Some(guard) = self.guard.take() { + let _ = guard.join(); + } + } + /// Stop the server from listening to its socket address. pub fn close(&mut self) -> HttpResult<()> { debug!("closing server");