diff --git a/Cargo.lock b/Cargo.lock index 0f4b5bd..1b51e9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,7 +140,7 @@ dependencies = [ [[package]] name = "gemserv" -version = "0.4.6" +version = "0.4.7" dependencies = [ "futures-util", "log", diff --git a/Cargo.toml b/Cargo.toml index 23e25b6..34d35f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gemserv" -version = "0.4.6" +version = "0.4.7" authors = ["int 80h "] edition = "2018" description = "A gemini server" diff --git a/src/conn.rs b/src/conn.rs index 36cb74f..a6fa246 100644 --- a/src/conn.rs +++ b/src/conn.rs @@ -4,7 +4,7 @@ use std::net::SocketAddr; use tokio::net::TcpStream; use tokio::io::AsyncRead; -use tokio::io::AsyncWriteExt; +use tokio::io::{AsyncWrite, AsyncWriteExt}; use tokio_openssl::SslStream; use crate::status::Status; @@ -35,6 +35,9 @@ impl Connection { if let Some(b) = body { self.send_raw(b.as_bytes()).await?; } + + futures_util::future::poll_fn(|ctx| std::pin::Pin::new(&mut self.stream).poll_shutdown(ctx)).await.unwrap(); + Ok(()) } @@ -46,6 +49,7 @@ impl Connection { pub async fn send_stream(&mut self, reader: &mut S) -> Result<(), io::Error> { tokio::io::copy(reader, &mut self.stream).await?; + futures_util::future::poll_fn(|ctx| std::pin::Pin::new(&mut self.stream).poll_shutdown(ctx)).await.unwrap(); Ok(()) } }