(fd: BorrowedFd<'_>, addr: &impl SocketAddrArg)
| 657 | |
| 658 | #[inline] |
| 659 | pub(crate) fn connect(fd: BorrowedFd<'_>, addr: &impl SocketAddrArg) -> io::Result<()> { |
| 660 | // SAFETY: This passes the `addr_ptr` reference to the OS which reads the |
| 661 | // buffers only within the `addr_len` bound. |
| 662 | unsafe { |
| 663 | addr.with_sockaddr(|addr_ptr, addr_len| { |
| 664 | #[cfg(not(target_arch = "x86"))] |
| 665 | { |
| 666 | ret(syscall_readonly!( |
| 667 | __NR_connect, |
| 668 | fd, |
| 669 | raw_arg(addr_ptr as *mut _), |
| 670 | socklen_t(addr_len) |
| 671 | )) |
| 672 | } |
| 673 | #[cfg(target_arch = "x86")] |
| 674 | { |
| 675 | ret(syscall_readonly!( |
| 676 | __NR_socketcall, |
| 677 | x86_sys(SYS_CONNECT), |
| 678 | slice_just_addr::<ArgReg<'_, SocketArg>, _>(&[ |
| 679 | fd.into(), |
| 680 | raw_arg(addr_ptr as *mut _), |
| 681 | socklen_t(addr_len) |
| 682 | ]) |
| 683 | )) |
| 684 | } |
| 685 | }) |
| 686 | } |
| 687 | } |
| 688 | |
| 689 | #[inline] |
| 690 | pub(crate) fn connect_unspec(fd: BorrowedFd<'_>) -> io::Result<()> { |
nothing calls this directly
no test coverage detected