Skip to content

Commit 042c4b5

Browse files
committed
UdpStream::poll_shutdown usage
1 parent 523fd03 commit 042c4b5

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

examples/echo-dtls.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{error::Error, net::SocketAddr, pin::Pin, str::FromStr, time::Duration};
1+
use std::{net::SocketAddr, pin::Pin, str::FromStr, time::Duration};
22
use udp_stream::UdpListener;
33

44
use openssl::{
@@ -29,28 +29,30 @@ fn ssl_acceptor(certificate: &[u8], private_key: &[u8]) -> std::io::Result<SslCo
2929
}
3030

3131
#[tokio::main]
32-
async fn main() -> Result<(), Box<dyn Error>> {
32+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
3333
let listener = UdpListener::bind(SocketAddr::from_str("127.0.0.1:8080")?).await?;
3434
let acceptor = ssl_acceptor(SERVER_CERT, SERVER_KEY)?;
3535
loop {
3636
let (socket, _) = listener.accept().await?;
3737
let acceptor = acceptor.clone();
3838
tokio::spawn(async move {
39-
let ssl = Ssl::new(&acceptor).unwrap();
40-
let mut stream = tokio_openssl::SslStream::new(ssl, socket).unwrap();
41-
Pin::new(&mut stream).accept().await.unwrap();
39+
let ssl = Ssl::new(&acceptor).map_err(std::io::Error::other)?;
40+
let mut stream = tokio_openssl::SslStream::new(ssl, socket).map_err(std::io::Error::other)?;
41+
Pin::new(&mut stream).accept().await.map_err(std::io::Error::other)?;
4242
let mut buf = vec![0u8; UDP_BUFFER_SIZE];
4343
loop {
4444
let duration = Duration::from_millis(UDP_TIMEOUT);
45-
let n = match timeout(duration, stream.read(&mut buf)).await.unwrap() {
46-
Ok(len) => len,
45+
let n = match timeout(duration, stream.read(&mut buf)).await {
46+
Ok(len) => len?,
4747
Err(_) => {
48-
return;
48+
stream.shutdown().await?;
49+
break;
4950
}
5051
};
5152

52-
stream.write_all(&buf[0..n]).await.unwrap();
53+
stream.write_all(&buf[0..n]).await?;
5354
}
55+
Ok::<(), std::io::Error>(())
5456
});
5557
}
5658
}

examples/echo-udp.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{error::Error, net::SocketAddr, str::FromStr, time::Duration};
1+
use std::{net::SocketAddr, str::FromStr, time::Duration};
22
use tokio::{
33
io::{AsyncReadExt, AsyncWriteExt},
44
time::timeout,
@@ -8,7 +8,7 @@ const UDP_BUFFER_SIZE: usize = 17480; // 17kb
88
const UDP_TIMEOUT: u64 = 10 * 1000; // 10sec
99

1010
#[tokio::main]
11-
async fn main() -> Result<(), Box<dyn Error>> {
11+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
1212
let level = format!("{}={}", module_path!(), "trace");
1313
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(level)).init();
1414

@@ -21,11 +21,17 @@ async fn main() -> Result<(), Box<dyn Error>> {
2121
let mut buf = vec![0u8; UDP_BUFFER_SIZE];
2222
let duration = Duration::from_millis(UDP_TIMEOUT);
2323
loop {
24-
let n = timeout(duration, stream.read(&mut buf)).await??;
24+
let n = match timeout(duration, stream.read(&mut buf)).await {
25+
Err(err) => {
26+
log::debug!("{id:?} {err}");
27+
stream.shutdown().await?;
28+
break;
29+
}
30+
Ok(val) => val?,
31+
};
2532
stream.write_all(&buf[0..n]).await?;
2633
log::trace!("{:?} echoed {:?} for {} bytes", id, stream.peer_addr(), n);
2734
}
28-
#[allow(unreachable_code)]
2935
Ok::<(), std::io::Error>(())
3036
};
3137
if let Err(e) = block.await {

0 commit comments

Comments
 (0)