[Fixed] call only once send_close_notify

This commit is contained in:
quininer 2017-08-15 22:00:20 +08:00
parent 037f84ea98
commit aefc023dd4
3 changed files with 18 additions and 4 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "tokio-rustls" name = "tokio-rustls"
version = "0.3.0" version = "0.3.1"
authors = ["quininer kel <quininer@live.com>"] authors = ["quininer kel <quininer@live.com>"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/quininer/tokio-rustls" repository = "https://github.com/quininer/tokio-rustls"
@ -10,6 +10,10 @@ readme = "README.md"
description = "Asynchronous TLS/SSL streams for Tokio using Rustls." description = "Asynchronous TLS/SSL streams for Tokio using Rustls."
categories = ["asynchronous", "cryptography", "network-programming"] categories = ["asynchronous", "cryptography", "network-programming"]
[badges]
travis-ci = { repository = "quininer/tokio-rustls" }
appveyor = { repository = "quininer/tokio-rustls" }
[features] [features]
danger = [ "rustls/dangerous_configuration" ] danger = [ "rustls/dangerous_configuration" ]
@ -22,7 +26,7 @@ tokio-proto = { version = "0.1", optional = true }
[dev-dependencies] [dev-dependencies]
tokio-core = "0.1" tokio-core = "0.1"
clap = "2.20" clap = "2.20"
webpki-roots = "0.11.0" webpki-roots = "0.12"
[target.'cfg(unix)'.dev-dependencies] [target.'cfg(unix)'.dev-dependencies]
tokio-file-unix = "0.4" tokio-file-unix = "0.4"

View File

@ -1,5 +1,10 @@
# tokio-rustls # tokio-rustls
[![crates](https://img.shields.io/crates/v/tokio-rustls.svg)](https://crates.io/crates/tokio-rustls) [![license](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/quininer/tokio-rustls/blob/master/LICENSE-MIT) [![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/quininer/tokio-rustls/blob/master/LICENSE-APACHE) [![docs.rs](https://docs.rs/tokio-rustls/badge.svg)](https://docs.rs/tokio-rustls/) [![travis-ci](https://travis-ci.org/quininer/tokio-rustls.svg?branch=master)](https://travis-ci.org/quininer/tokio-rustls)
[![appveyor](https://ci.appveyor.com/api/projects/status/4ukw15enii50suqi?svg=true)](https://ci.appveyor.com/project/quininer/tokio-rustls)
[![crates](https://img.shields.io/crates/v/tokio-rustls.svg)](https://crates.io/crates/tokio-rustls)
[![license](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/quininer/tokio-rustls/blob/master/LICENSE-MIT)
[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/quininer/tokio-rustls/blob/master/LICENSE-APACHE)
[![docs.rs](https://docs.rs/tokio-rustls/badge.svg)](https://docs.rs/tokio-rustls/)
Asynchronous TLS/SSL streams for [Tokio](https://tokio.rs/) using Asynchronous TLS/SSL streams for [Tokio](https://tokio.rs/) using
[Rustls](https://github.com/ctz/rustls). [Rustls](https://github.com/ctz/rustls).

View File

@ -165,6 +165,7 @@ impl<S, C> Future for MidHandshake<S, C>
/// protocol. /// protocol.
#[derive(Debug)] #[derive(Debug)]
pub struct TlsStream<S, C> { pub struct TlsStream<S, C> {
is_shutdown: bool,
eof: bool, eof: bool,
io: S, io: S,
session: C session: C
@ -186,6 +187,7 @@ impl<S, C> TlsStream<S, C>
#[inline] #[inline]
pub fn new(io: S, session: C) -> TlsStream<S, C> { pub fn new(io: S, session: C) -> TlsStream<S, C> {
TlsStream { TlsStream {
is_shutdown: false,
eof: false, eof: false,
io: io, io: io,
session: session session: session
@ -310,7 +312,10 @@ impl<S, C> AsyncWrite for TlsStream<S, C>
C: Session C: Session
{ {
fn shutdown(&mut self) -> Poll<(), io::Error> { fn shutdown(&mut self) -> Poll<(), io::Error> {
self.session.send_close_notify(); if !self.is_shutdown {
self.session.send_close_notify();
self.is_shutdown = true;
}
while self.session.wants_write() { while self.session.wants_write() {
try_nb!(self.session.write_tls(&mut self.io)); try_nb!(self.session.write_tls(&mut self.io));
} }