From d59aa94ac09e365626c24d1e59b77eebf9e014c9 Mon Sep 17 00:00:00 2001 From: Alex Konradi Date: Fri, 6 Jan 2023 14:14:23 -0800 Subject: [PATCH] Retry ioctl when checking TCP socket receive queue len When checking how much data is left in the receive queue, retry to allow time for packets to propagate and the system to push data into the socket's receive queue. PiperOrigin-RevId: 500257746 --- test/syscalls/linux/tcp_socket.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/syscalls/linux/tcp_socket.cc b/test/syscalls/linux/tcp_socket.cc index 5b9a61775..123b08af2 100644 --- a/test/syscalls/linux/tcp_socket.cc +++ b/test/syscalls/linux/tcp_socket.cc @@ -771,8 +771,18 @@ TEST_P(TcpSocketTest, Tiocinq) { ASSERT_THAT(read, SyscallSucceeds()); size -= read; + // The remaining data should end up in the receive queue. + constexpr absl::Duration kSleepFor = absl::Milliseconds(10); int inq = 0; - ASSERT_THAT(ioctl(accepted_.get(), TIOCINQ, &inq), SyscallSucceeds()); + for (const auto start = absl::Now(); + absl::Now() <= start + absl::Milliseconds(kTimeoutMillis);) { + ASSERT_THAT(ioctl(accepted_.get(), TIOCINQ, &inq), SyscallSucceeds()); + if (size == inq) { + break; + } + absl::SleepFor(kSleepFor); + } + ASSERT_EQ(inq, size); } }