MCPcopy Create free account
hub / github.com/bytecodealliance/rustix / sendto

Function sendto

src/backend/linux_raw/net/syscalls.rs:434–475  ·  view source on GitHub ↗
(
    fd: BorrowedFd<'_>,
    buf: &[u8],
    flags: SendFlags,
    addr: &impl SocketAddrArg,
)

Source from the content-addressed store, hash-verified

432
433#[inline]
434pub(crate) fn sendto(
435 fd: BorrowedFd<'_>,
436 buf: &[u8],
437 flags: SendFlags,
438 addr: &impl SocketAddrArg,
439) -> io::Result<usize> {
440 let (buf_addr, buf_len) = slice(buf);
441
442 // SAFETY: This passes the `addr_ptr` reference to the OS which reads the
443 // buffers only within the `addr_len` bound.
444 unsafe {
445 addr.with_sockaddr(|addr_ptr, addr_len| {
446 #[cfg(not(target_arch = "x86"))]
447 {
448 ret_usize(syscall_readonly!(
449 __NR_sendto,
450 fd,
451 buf_addr,
452 buf_len,
453 flags,
454 raw_arg(addr_ptr as *mut _),
455 socklen_t(addr_len)
456 ))
457 }
458 #[cfg(target_arch = "x86")]
459 {
460 ret_usize(syscall_readonly!(
461 __NR_socketcall,
462 x86_sys(SYS_SENDTO),
463 slice_just_addr::<ArgReg<'_, SocketArg>, _>(&[
464 fd.into(),
465 buf_addr,
466 buf_len,
467 flags.into(),
468 raw_arg(addr_ptr as *mut _),
469 socklen_t(addr_len)
470 ])
471 ))
472 }
473 })
474 }
475}
476
477#[inline]
478pub(crate) unsafe fn recv(

Callers

nothing calls this directly

Calls 3

sliceFunction · 0.85
ret_usizeFunction · 0.50
with_sockaddrMethod · 0.45

Tested by

no test coverage detected