refactor(server): add private constructor to AddrIncoming and AddrSteram
This commit is contained in:
@@ -30,6 +30,7 @@ pub use tokio_service::{NewService, Service};
|
||||
use proto;
|
||||
#[cfg(feature = "compat")]
|
||||
use proto::Body;
|
||||
use self::addr_stream::AddrStream;
|
||||
use self::hyper_service::HyperService;
|
||||
|
||||
pub use proto::response::Response;
|
||||
@@ -223,10 +224,7 @@ impl<B: AsRef<[u8]> + 'static> Http<B> {
|
||||
Bd: Stream<Item=B, Error=::Error>,
|
||||
{
|
||||
let listener = TcpListener::bind(addr, &handle)?;
|
||||
let incoming = AddrIncoming {
|
||||
addr: listener.local_addr()?,
|
||||
listener: listener,
|
||||
};
|
||||
let incoming = AddrIncoming::new(listener)?;
|
||||
Ok(self.serve_incoming(incoming, new_service))
|
||||
}
|
||||
|
||||
@@ -364,10 +362,7 @@ impl<S, B> Server<S, B>
|
||||
|
||||
let handle = reactor.handle();
|
||||
|
||||
let incoming = AddrIncoming {
|
||||
addr: listener.local_addr()?,
|
||||
listener: listener,
|
||||
};
|
||||
let incoming = AddrIncoming::new(listener)?;
|
||||
|
||||
// Mini future to track the number of active services
|
||||
let info = Rc::new(RefCell::new(Info {
|
||||
@@ -586,6 +581,13 @@ mod unnameable {
|
||||
// ===== impl AddrIncoming =====
|
||||
|
||||
impl AddrIncoming {
|
||||
fn new(listener: TcpListener) -> io::Result<AddrIncoming> {
|
||||
Ok(AddrIncoming {
|
||||
addr: listener.local_addr()?,
|
||||
listener: listener,
|
||||
})
|
||||
}
|
||||
|
||||
/// Get the local address bound to this listener.
|
||||
pub fn local_addr(&self) -> SocketAddr {
|
||||
self.addr
|
||||
@@ -594,14 +596,14 @@ impl AddrIncoming {
|
||||
|
||||
impl Stream for AddrIncoming {
|
||||
// currently unnameable...
|
||||
type Item = self::addr_stream::AddrStream;
|
||||
type Item = 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, addr))));
|
||||
return Ok(Async::Ready(Some(AddrStream::new(socket, addr))));
|
||||
},
|
||||
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => return Ok(Async::NotReady),
|
||||
Err(e) => return Err(e),
|
||||
@@ -618,12 +620,6 @@ mod addr_stream {
|
||||
use tokio::net::TcpStream;
|
||||
use tokio_io::{AsyncRead, AsyncWrite};
|
||||
|
||||
pub fn new(tcp: TcpStream, addr: SocketAddr) -> AddrStream {
|
||||
AddrStream {
|
||||
inner: tcp,
|
||||
remote_addr: addr,
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct AddrStream {
|
||||
@@ -631,6 +627,15 @@ mod addr_stream {
|
||||
pub(super) remote_addr: SocketAddr,
|
||||
}
|
||||
|
||||
impl AddrStream {
|
||||
pub(super) fn new(tcp: TcpStream, addr: SocketAddr) -> AddrStream {
|
||||
AddrStream {
|
||||
inner: tcp,
|
||||
remote_addr: addr,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Read for AddrStream {
|
||||
#[inline]
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
|
||||
Reference in New Issue
Block a user