refactor(server): use AddrIncoming in Server::run
This commit is contained in:
@@ -364,6 +364,11 @@ impl<S, B> Server<S, B>
|
||||
|
||||
let handle = reactor.handle();
|
||||
|
||||
let incoming = AddrIncoming {
|
||||
addr: listener.local_addr()?,
|
||||
listener: listener,
|
||||
};
|
||||
|
||||
// Mini future to track the number of active services
|
||||
let info = Rc::new(RefCell::new(Info {
|
||||
active: 0,
|
||||
@@ -371,7 +376,8 @@ impl<S, B> Server<S, B>
|
||||
}));
|
||||
|
||||
// Future for our server's execution
|
||||
let srv = listener.incoming().for_each(|(socket, addr)| {
|
||||
let srv = incoming.for_each(|socket| {
|
||||
let addr = socket.remote_addr;
|
||||
let addr_service = SocketAddrService::new(addr, new_service.new_service()?);
|
||||
let s = NotifyService {
|
||||
inner: addr_service,
|
||||
@@ -587,17 +593,18 @@ impl AddrIncoming {
|
||||
}
|
||||
|
||||
impl Stream for AddrIncoming {
|
||||
// currently unnameable...
|
||||
type Item = self::addr_stream::AddrStream;
|
||||
type Error = ::std::io::Error;
|
||||
|
||||
fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
|
||||
loop {
|
||||
match self.listener.accept() {
|
||||
Ok((socket, _addr)) => {
|
||||
return Ok(Async::Ready(Some(self::addr_stream::new(socket))));
|
||||
Ok((socket, addr)) => {
|
||||
return Ok(Async::Ready(Some(self::addr_stream::new(socket, addr))));
|
||||
},
|
||||
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => return Ok(Async::NotReady),
|
||||
Err(e) => debug!("internal error: {:?}", e),
|
||||
Err(e) => return Err(e),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -605,20 +612,23 @@ impl Stream for AddrIncoming {
|
||||
|
||||
mod addr_stream {
|
||||
use std::io::{self, Read, Write};
|
||||
use std::net::SocketAddr;
|
||||
use bytes::{Buf, BufMut};
|
||||
use futures::Poll;
|
||||
use tokio::net::TcpStream;
|
||||
use tokio_io::{AsyncRead, AsyncWrite};
|
||||
|
||||
pub fn new(tcp: TcpStream) -> AddrStream {
|
||||
pub fn new(tcp: TcpStream, addr: SocketAddr) -> AddrStream {
|
||||
AddrStream {
|
||||
inner: tcp,
|
||||
remote_addr: addr,
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct AddrStream {
|
||||
inner: TcpStream,
|
||||
pub(super) remote_addr: SocketAddr,
|
||||
}
|
||||
|
||||
impl Read for AddrStream {
|
||||
|
||||
Reference in New Issue
Block a user