mirror of https://github.com/ctz/rustls
Fix tlsserver on Windows
mio 0.6 allowed selection of level- or edge-triggered events. mio 0.7 removed that, and on Windows events on server sockets are genuinely edge-triggered: coalescing multiple incoming sockets into one event. Therefore, accept sockets until we can't accept any more.
This commit is contained in:
parent
ab9dc83d9b
commit
616392f4d8
|
@ -64,25 +64,27 @@ impl TlsServer {
|
|||
}
|
||||
}
|
||||
|
||||
fn accept(&mut self, registry: &mio::Registry) -> bool {
|
||||
match self.server.accept() {
|
||||
Ok((socket, addr)) => {
|
||||
debug!("Accepting new connection from {:?}", addr);
|
||||
fn accept(&mut self, registry: &mio::Registry) -> Result<(), io::Error> {
|
||||
loop {
|
||||
match self.server.accept() {
|
||||
Ok((socket, addr)) => {
|
||||
debug!("Accepting new connection from {:?}", addr);
|
||||
|
||||
let tls_session = rustls::ServerSession::new(&self.tls_config);
|
||||
let mode = self.mode.clone();
|
||||
let tls_session = rustls::ServerSession::new(&self.tls_config);
|
||||
let mode = self.mode.clone();
|
||||
|
||||
let token = mio::Token(self.next_id);
|
||||
self.next_id += 1;
|
||||
let token = mio::Token(self.next_id);
|
||||
self.next_id += 1;
|
||||
|
||||
let mut connection = Connection::new(socket, token, mode, tls_session);
|
||||
connection.register(registry);
|
||||
self.connections.insert(token, connection);
|
||||
true
|
||||
}
|
||||
Err(e) => {
|
||||
println!("encountered error while accepting connection; err={:?}", e);
|
||||
false
|
||||
let mut connection = Connection::new(socket, token, mode, tls_session);
|
||||
connection.register(registry);
|
||||
self.connections.insert(token, connection);
|
||||
}
|
||||
Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => return Ok(()),
|
||||
Err(err) => {
|
||||
println!("encountered error while accepting connection; err={:?}", err);
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -635,9 +637,8 @@ fn main() {
|
|||
for event in events.iter() {
|
||||
match event.token() {
|
||||
LISTENER => {
|
||||
if !tlsserv.accept(poll.registry()) {
|
||||
break;
|
||||
}
|
||||
tlsserv.accept(poll.registry())
|
||||
.expect("error accepting socket");
|
||||
}
|
||||
_ => tlsserv.conn_event(poll.registry(), &event)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue