mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-09-25 12:00:35 +00:00
72 lines
2.1 KiB
Rust
72 lines
2.1 KiB
Rust
#![warn(rust_2018_idioms)]
|
|
#![cfg(all(
|
|
feature = "net",
|
|
any(
|
|
target_os = "linux",
|
|
target_os = "android",
|
|
target_os = "fuchsia",
|
|
target_os = "cygwin",
|
|
)
|
|
))]
|
|
#![cfg(not(miri))] // No `socket` in miri.
|
|
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
|
use tokio::net::TcpListener;
|
|
use tokio::net::TcpStream;
|
|
use tokio::sync::oneshot;
|
|
|
|
#[tokio::test]
|
|
async fn socket_works_with_quickack() {
|
|
const MESSAGE: &str = "Hello, tokio!";
|
|
|
|
let (tx_port, rx_port) = oneshot::channel();
|
|
|
|
let server = tokio::spawn(async move {
|
|
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
|
|
let addr = listener.local_addr().unwrap();
|
|
|
|
tx_port.send(addr.port()).unwrap();
|
|
|
|
let (mut stream, _) = listener.accept().await.unwrap();
|
|
stream.set_quickack(true).unwrap();
|
|
assert!(stream.quickack().unwrap());
|
|
|
|
stream.write_all(MESSAGE.as_bytes()).await.unwrap();
|
|
|
|
let mut buf = vec![0; MESSAGE.len()];
|
|
stream.read_exact(&mut buf).await.unwrap();
|
|
assert_eq!(buf, MESSAGE.as_bytes());
|
|
|
|
// There is nothing special about setting quickack to false
|
|
// at this point, we just want to test the `false` case.
|
|
stream.set_quickack(false).unwrap();
|
|
assert!(!stream.quickack().unwrap());
|
|
|
|
stream.shutdown().await.unwrap();
|
|
});
|
|
|
|
let port = rx_port.await.unwrap();
|
|
let client = tokio::spawn(async move {
|
|
let mut stream = TcpStream::connect(format!("127.0.0.1:{port}"))
|
|
.await
|
|
.unwrap();
|
|
stream.set_quickack(true).unwrap();
|
|
assert!(stream.quickack().unwrap());
|
|
|
|
let mut buf = vec![0; MESSAGE.len()];
|
|
stream.read_exact(&mut buf).await.unwrap();
|
|
assert_eq!(buf, MESSAGE.as_bytes());
|
|
|
|
stream.write_all(MESSAGE.as_bytes()).await.unwrap();
|
|
|
|
// There is nothing special about setting quickack to false
|
|
// at this point, we just want to test the `false` case.
|
|
stream.set_quickack(false).unwrap();
|
|
assert!(!stream.quickack().unwrap());
|
|
|
|
stream.shutdown().await.unwrap();
|
|
});
|
|
|
|
tokio::try_join!(server, client).unwrap();
|
|
}
|