in src/core/server/src/listener.rs [115:158]
fn accept(&mut self) {
for _ in 0..ACCEPT_BATCH {
if let Ok(mut session) = self.listener.accept().map(Session::from) {
if session.is_handshaking() {
let s = self.sessions.vacant_entry();
let interest = session.interest();
if session
.register(self.poll.registry(), Token(s.key()), interest)
.is_ok()
{
s.insert(session);
} else {
// failed to register
}
} else {
for attempt in 1..=QUEUE_RETRIES {
if let Err(s) = self.session_queue.try_send_any(session) {
if attempt == QUEUE_RETRIES {
LISTENER_SESSION_DISCARD.increment();
} else {
let _ = self.session_queue.wake();
}
session = s;
} else {
break;
}
}
// if pushing to the session queues fails, the session will be
// closed on drop here
}
} else {
return;
}
}
// reregister is needed here so we will call accept if there is a backlog
if self
.listener
.reregister(self.poll.registry(), LISTENER_TOKEN, Interest::READABLE)
.is_err()
{
// failed to reregister listener? how do we handle this?
}
}