[Fixed] call only once send_close_notify
This commit is contained in:
parent
037f84ea98
commit
aefc023dd4
@ -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"
|
||||||
|
@ -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).
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user