From 08ef7680077e116d17281426c3f88c0df84bf32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87a=C4=9Fatay=20Yi=C4=9Fit=20=C5=9Eahin?= Date: Sat, 16 May 2026 20:06:32 +0200 Subject: [PATCH] perf(tcp): optimize active socket search Increases iperf performance by ~15% in a non-scientific test. --- src/fd/socket/tcp.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/fd/socket/tcp.rs b/src/fd/socket/tcp.rs index db71556afe..f403d3cde1 100644 --- a/src/fd/socket/tcp.rs +++ b/src/fd/socket/tcp.rs @@ -313,19 +313,15 @@ impl ObjectInterface for Socket { let connection_handle = future::poll_fn(|cx| { let mut guard = NIC.lock(); let nic = guard.as_nic_mut().unwrap(); - let mut socket_handle = None; - for handle in self.handle.iter() { - let s = nic.get_mut_socket::>(*handle); - - if s.is_active() { - socket_handle = Some(*handle); - break; - } - } + let socket_handle = self + .handle + .extract_if(.., |handle| { + nic.get_mut_socket::>(*handle).is_active() + }) + .next(); if let Some(handle) = socket_handle { - self.handle.remove(&handle); Poll::Ready(Ok(handle)) } else if self.is_nonblocking { Poll::Ready(Err(Errno::Again))