From 1aa383566070b53eb734c5f4023baf027979e4eb Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Thu, 1 Feb 2018 12:24:35 -0800 Subject: [PATCH] refactor(server): use AddrIncoming in Server::run --- src/server/mod.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index c9fb1538..f940090f 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -364,6 +364,11 @@ impl Server 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 Server })); // 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, 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 {