Fixed TlsStream closing the connection abruptly on fatal errors. (#12)

Instead, flush queued TLS messages when an error occurs before closing the connection.
This commit is contained in:
Jack Zhou 2017-07-18 14:23:56 -07:00
parent d606a10000
commit 42e1d72fb2

View File

@ -172,8 +172,16 @@ impl<S, C> TlsStream<S, C>
continue
},
Ok(_) => {
self.session.process_new_packets()
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
if let Err(err) = self.session.process_new_packets() {
// flush queued messages before returning an Err in
// order to send alerts instead of abruptly closing
// the socket
if self.session.wants_write() {
// ignore result to avoid masking original error
let _ = self.session.write_tls(&mut self.io);
}
return Err(io::Error::new(io::ErrorKind::Other, err));
}
continue
},
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => true,