1 #![warn(rust_2018_idioms)] 2 #![cfg(feature = "full")] 3 4 use tokio::io::{self, AsyncWriteExt}; 5 use tokio::net::{TcpListener, TcpStream}; 6 use tokio::prelude::*; 7 use tokio_test::assert_ok; 8 9 #[tokio::test] shutdown()10async fn shutdown() { 11 let mut srv = assert_ok!(TcpListener::bind("127.0.0.1:0").await); 12 let addr = assert_ok!(srv.local_addr()); 13 14 tokio::spawn(async move { 15 let mut stream = assert_ok!(TcpStream::connect(&addr).await); 16 17 assert_ok!(AsyncWriteExt::shutdown(&mut stream).await); 18 19 let mut buf = [0; 1]; 20 let n = assert_ok!(stream.read(&mut buf).await); 21 assert_eq!(n, 0); 22 }); 23 24 let (mut stream, _) = assert_ok!(srv.accept().await); 25 let (mut rd, mut wr) = stream.split(); 26 27 let n = assert_ok!(io::copy(&mut rd, &mut wr).await); 28 assert_eq!(n, 0); 29 } 30