+ where A: ToSocketAddrs,
+ Self: 'static,
+ {
+ let listener = try!(TcpListener::bind(&addr));
+ let addr = try!(listener.local_addr());
+ info!("spawn_with_config: spinning up server on {:?}", addr);
+ let (die_tx, die_rx) = channel();
+ let join_handle = thread::spawn(move || {
+ let pool = Pool::new(100); // TODO(tjk): make this configurable, and expire idle threads
+ let shutdown = AtomicBool::new(false);
+ let server = Server {
+ server: &self,
+ listener: listener,
+ read_timeout: config.timeout,
+ die_rx: die_rx,
+ shutdown: &shutdown,
+ };
+ pool.scoped(|scope| {
+ server.serve(scope);
+ });
+ });
+ Ok(ServeHandle {
+ tx: die_tx,
+ join_handle: join_handle,
+ addr: addr.clone(),
+ })
+ }
+
}
impl Serve for P
- where P: Send + Sync + ::std::ops::Deref,
+ where P: Send + Sync + ::std::ops::Deref,
S: Serve
{
type Request = S::Request;