[ping] Add missing flush after write. (#1770)

After sending the ping and before awaiting the pong,
the stream must be flushed to guarantee the data is
sent before awaiting the reply.
This commit is contained in:
Roman Borschel
2020-09-28 10:57:02 +02:00
committed by GitHub
parent 0b18b864f2
commit f66f40bcd7
4 changed files with 45 additions and 12 deletions

View File

@ -87,8 +87,10 @@ where
let payload: [u8; PING_SIZE] = thread_rng().sample(distributions::Standard);
log::debug!("Preparing ping payload {:?}", payload);
stream.write_all(&payload).await?;
stream.flush().await?;
let started = Instant::now();
let mut recv_payload = [0u8; PING_SIZE];
log::debug!("Awaiting pong for {:?}", payload);
stream.read_exact(&mut recv_payload).await?;
if recv_payload == payload {
Ok((stream, started.elapsed()))
@ -103,7 +105,9 @@ where
S: AsyncRead + AsyncWrite + Unpin
{
let mut payload = [0u8; PING_SIZE];
log::debug!("Waiting for ping ...");
stream.read_exact(&mut payload).await?;
log::debug!("Sending pong for {:?}", payload);
stream.write_all(&payload).await?;
stream.flush().await?;
Ok(stream)