From 04369e04d0de748556adf11d7e0080d07e01c18d Mon Sep 17 00:00:00 2001 From: Jeff Martin Date: Mon, 10 Jun 2024 12:39:00 -0700 Subject: [PATCH] Use blocking sockets when testing raw IP sockets The original code instantiated the raw IP sockets with NON_BLOCKING, which caused problems in the PingSuccessfully test case. That case sends and expects to immediately receive an ICMPv6 Echo Request/Reply. On Fuchsia, the Loopback devices tx/rx queues are decoupled, so it's possible for the test to call `recvmsg` before the packet has been delivered to the socket (resulting in EAGAIN). By using a blocking socket, the test will wait until `recvmsg` no longer returns EAGAIN. PiperOrigin-RevId: 641989486 --- test/syscalls/linux/raw_socket_icmp.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/syscalls/linux/raw_socket_icmp.cc b/test/syscalls/linux/raw_socket_icmp.cc index 75662b4df..e02b0c05c 100644 --- a/test/syscalls/linux/raw_socket_icmp.cc +++ b/test/syscalls/linux/raw_socket_icmp.cc @@ -592,8 +592,7 @@ class RawSocketICMPv6Test : public Test { void SetUp() override { SKIP_IF(!ASSERT_NO_ERRNO_AND_VALUE(HaveRawIPSocketCapability())); - fd_ = ASSERT_NO_ERRNO_AND_VALUE( - Socket(AF_INET6, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_ICMPV6)); + fd_ = ASSERT_NO_ERRNO_AND_VALUE(Socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)); } void TearDown() override {