Merge branch 'master' into refactor/simplify_server_future

This commit is contained in:
fakeshadow 2021-04-27 11:55:56 -07:00 committed by GitHub
commit 73fc384514
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 17 deletions

View File

@ -7,7 +7,7 @@ use slab::Slab;
use crate::builder::ServerBuilder; use crate::builder::ServerBuilder;
use crate::server::ServerHandle; use crate::server::ServerHandle;
use crate::socket::{MioListener, SocketAddr}; use crate::socket::MioListener;
use crate::waker_queue::{WakerInterest, WakerQueue, WAKER_TOKEN}; use crate::waker_queue::{WakerInterest, WakerQueue, WAKER_TOKEN};
use crate::worker::{ use crate::worker::{
Conn, ServerWorker, WorkerAvailability, WorkerHandleAccept, WorkerHandleServer, Conn, ServerWorker, WorkerAvailability, WorkerHandleAccept, WorkerHandleServer,
@ -17,9 +17,6 @@ use crate::Token;
const DUR_ON_ERR: Duration = Duration::from_millis(500); const DUR_ON_ERR: Duration = Duration::from_millis(500);
struct ServerSocketInfo { struct ServerSocketInfo {
/// Address of socket. Mainly used for logging.
addr: SocketAddr,
/// Beware this is the crate token for identify socket and should not be confused /// Beware this is the crate token for identify socket and should not be confused
/// with `mio::Token`. /// with `mio::Token`.
token: Token, token: Token,
@ -154,8 +151,6 @@ impl Accept {
) -> io::Result<(Accept, Slab<ServerSocketInfo>)> { ) -> io::Result<(Accept, Slab<ServerSocketInfo>)> {
let mut sockets = Slab::new(); let mut sockets = Slab::new();
for (hnd_token, mut lst) in socks.into_iter() { for (hnd_token, mut lst) in socks.into_iter() {
let addr = lst.local_addr();
let entry = sockets.vacant_entry(); let entry = sockets.vacant_entry();
let token = entry.key(); let token = entry.key();
@ -164,7 +159,6 @@ impl Accept {
.register(&mut lst, MioToken(token), Interest::READABLE)?; .register(&mut lst, MioToken(token), Interest::READABLE)?;
entry.insert(ServerSocketInfo { entry.insert(ServerSocketInfo {
addr,
token: hnd_token, token: hnd_token,
lst, lst,
timeout_deadline: None, timeout_deadline: None,
@ -339,14 +333,14 @@ impl Accept {
fn register_logged(&self, token: usize, info: &mut ServerSocketInfo) { fn register_logged(&self, token: usize, info: &mut ServerSocketInfo) {
match self.register(token, info) { match self.register(token, info) {
Ok(_) => info!("Resume accepting connections on {}", info.addr), Ok(_) => info!("Resume accepting connections on {}", info.lst.local_addr()),
Err(e) => error!("Can not register server socket {}", e), Err(e) => error!("Can not register server socket {}", e),
} }
} }
fn deregister_logged(&self, info: &mut ServerSocketInfo) { fn deregister_logged(&self, info: &mut ServerSocketInfo) {
match self.poll.registry().deregister(&mut info.lst) { match self.poll.registry().deregister(&mut info.lst) {
Ok(_) => info!("Paused accepting connections on {}", info.addr), Ok(_) => info!("Paused accepting connections on {}", info.lst.local_addr()),
Err(e) => { Err(e) => {
error!("Can not deregister server socket {}", e) error!("Can not deregister server socket {}", e)
} }

View File

@ -23,9 +23,15 @@ pub(crate) enum MioListener {
impl MioListener { impl MioListener {
pub(crate) fn local_addr(&self) -> SocketAddr { pub(crate) fn local_addr(&self) -> SocketAddr {
match *self { match *self {
MioListener::Tcp(ref lst) => SocketAddr::Tcp(lst.local_addr().unwrap()), MioListener::Tcp(ref lst) => lst
.local_addr()
.map(SocketAddr::Tcp)
.unwrap_or(SocketAddr::Unknown),
#[cfg(unix)] #[cfg(unix)]
MioListener::Uds(ref lst) => SocketAddr::Uds(lst.local_addr().unwrap()), MioListener::Uds(ref lst) => lst
.local_addr()
.map(SocketAddr::Uds)
.unwrap_or(SocketAddr::Unknown),
} }
} }
@ -110,14 +116,15 @@ impl fmt::Debug for MioListener {
impl fmt::Display for MioListener { impl fmt::Display for MioListener {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self { match *self {
MioListener::Tcp(ref lst) => write!(f, "{}", lst.local_addr().ok().unwrap()), MioListener::Tcp(ref lst) => write!(f, "{:?}", lst),
#[cfg(unix)] #[cfg(unix)]
MioListener::Uds(ref lst) => write!(f, "{:?}", lst.local_addr().ok().unwrap()), MioListener::Uds(ref lst) => write!(f, "{:?}", lst),
} }
} }
} }
pub(crate) enum SocketAddr { pub(crate) enum SocketAddr {
Unknown,
Tcp(StdSocketAddr), Tcp(StdSocketAddr),
#[cfg(unix)] #[cfg(unix)]
Uds(mio::net::SocketAddr), Uds(mio::net::SocketAddr),
@ -126,9 +133,10 @@ pub(crate) enum SocketAddr {
impl fmt::Display for SocketAddr { impl fmt::Display for SocketAddr {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self { match *self {
SocketAddr::Tcp(ref addr) => write!(f, "{}", addr), Self::Unknown => write!(f, "Unknown SocketAddr"),
Self::Tcp(ref addr) => write!(f, "{}", addr),
#[cfg(unix)] #[cfg(unix)]
SocketAddr::Uds(ref addr) => write!(f, "{:?}", addr), Self::Uds(ref addr) => write!(f, "{:?}", addr),
} }
} }
} }
@ -136,9 +144,10 @@ impl fmt::Display for SocketAddr {
impl fmt::Debug for SocketAddr { impl fmt::Debug for SocketAddr {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self { match *self {
SocketAddr::Tcp(ref addr) => write!(f, "{:?}", addr), Self::Unknown => write!(f, "Unknown SocketAddr"),
Self::Tcp(ref addr) => write!(f, "{:?}", addr),
#[cfg(unix)] #[cfg(unix)]
SocketAddr::Uds(ref addr) => write!(f, "{:?}", addr), Self::Uds(ref addr) => write!(f, "{:?}", addr),
} }
} }
} }