From 46f81c6eb54b29d1b4a6dc364b98fcc03ac2fcbf Mon Sep 17 00:00:00 2001 From: Benedikt Spies Date: Fri, 19 Dec 2025 00:13:08 +0100 Subject: [PATCH] refactor: simplify packet sending loop using core::slice::chunks --- apps/src/sendto.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/apps/src/sendto.rs b/apps/src/sendto.rs index 28dbe2903a..9bb7377eee 100644 --- a/apps/src/sendto.rs +++ b/apps/src/sendto.rs @@ -24,8 +24,6 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -use std::cmp; - use std::io; /// For Linux, try to detect GSO is available. @@ -94,10 +92,21 @@ fn send_to_gso_pacing( /// /// When GSO and SO_TXTIME are enabled, send packets using send_to_gso(). /// Otherwise, send packets using socket.send_to(). +/// +/// # Errors +/// +/// Returns [`io::ErrorKind::InvalidInput`] if `segment_size` is 0. pub fn send_to( socket: &mio::net::UdpSocket, buf: &[u8], send_info: &quiche::SendInfo, segment_size: usize, pacing: bool, enable_gso: bool, ) -> io::Result { + if segment_size == 0 { + return Err(io::Error::new( + io::ErrorKind::InvalidInput, + "segment_size must be greater than 0", + )); + } + if pacing && enable_gso { match send_to_gso_pacing(socket, buf, send_info, segment_size) { Ok(v) => { @@ -109,22 +118,14 @@ pub fn send_to( } } - let mut off = 0; - let mut left = buf.len(); let mut written = 0; - - while left > 0 { - let pkt_len = cmp::min(left, segment_size); - - match socket.send_to(&buf[off..off + pkt_len], send_info.to) { + for chunk in buf.chunks(segment_size) { + match socket.send_to(chunk, send_info.to) { Ok(v) => { written += v; }, Err(e) => return Err(e), } - - off += pkt_len; - left -= pkt_len; } Ok(written)