1b8a62b91Sopenharmony_ciuse crate::fd::OwnedFd; 2b8a62b91Sopenharmony_ciuse crate::net::{SocketAddr, SocketAddrAny, SocketAddrV4, SocketAddrV6}; 3b8a62b91Sopenharmony_ciuse crate::{backend, io}; 4b8a62b91Sopenharmony_ciuse backend::fd::{AsFd, BorrowedFd}; 5b8a62b91Sopenharmony_ci 6b8a62b91Sopenharmony_ci#[cfg(unix)] 7b8a62b91Sopenharmony_cipub use backend::net::addr::SocketAddrUnix; 8b8a62b91Sopenharmony_cipub use backend::net::types::{ 9b8a62b91Sopenharmony_ci AcceptFlags, AddressFamily, Protocol, Shutdown, SocketFlags, SocketType, 10b8a62b91Sopenharmony_ci}; 11b8a62b91Sopenharmony_ci 12b8a62b91Sopenharmony_ciimpl Default for Protocol { 13b8a62b91Sopenharmony_ci #[inline] 14b8a62b91Sopenharmony_ci fn default() -> Self { 15b8a62b91Sopenharmony_ci Self::IP 16b8a62b91Sopenharmony_ci } 17b8a62b91Sopenharmony_ci} 18b8a62b91Sopenharmony_ci 19b8a62b91Sopenharmony_ci/// `socket(domain, type_, protocol)`—Creates a socket. 20b8a62b91Sopenharmony_ci/// 21b8a62b91Sopenharmony_ci/// POSIX guarantees that `socket` will use the lowest unused file descriptor, 22b8a62b91Sopenharmony_ci/// however it is not safe in general to rely on this, as file descriptors 23b8a62b91Sopenharmony_ci/// may be unexpectedly allocated on other threads or in libraries. 24b8a62b91Sopenharmony_ci/// 25b8a62b91Sopenharmony_ci/// To pass extra flags such as [`SocketFlags::CLOEXEC`], use [`socket_with`]. 26b8a62b91Sopenharmony_ci/// 27b8a62b91Sopenharmony_ci/// # References 28b8a62b91Sopenharmony_ci/// - [POSIX] 29b8a62b91Sopenharmony_ci/// - [Linux] 30b8a62b91Sopenharmony_ci/// - [Apple] 31b8a62b91Sopenharmony_ci/// - [Winsock2] 32b8a62b91Sopenharmony_ci/// 33b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html 34b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/socket.2.html 35b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socket.2.html 36b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket 37b8a62b91Sopenharmony_ci#[inline] 38b8a62b91Sopenharmony_cipub fn socket(domain: AddressFamily, type_: SocketType, protocol: Protocol) -> io::Result<OwnedFd> { 39b8a62b91Sopenharmony_ci backend::net::syscalls::socket(domain, type_, protocol) 40b8a62b91Sopenharmony_ci} 41b8a62b91Sopenharmony_ci 42b8a62b91Sopenharmony_ci/// `socket_with(domain, type_ | flags, protocol)`—Creates a socket, with 43b8a62b91Sopenharmony_ci/// flags. 44b8a62b91Sopenharmony_ci/// 45b8a62b91Sopenharmony_ci/// POSIX guarantees that `socket` will use the lowest unused file descriptor, 46b8a62b91Sopenharmony_ci/// however it is not safe in general to rely on this, as file descriptors 47b8a62b91Sopenharmony_ci/// may be unexpectedly allocated on other threads or in libraries. 48b8a62b91Sopenharmony_ci/// 49b8a62b91Sopenharmony_ci/// `socket_with` is the same as [`socket`] but adds an additional flags 50b8a62b91Sopenharmony_ci/// operand. 51b8a62b91Sopenharmony_ci/// 52b8a62b91Sopenharmony_ci/// # References 53b8a62b91Sopenharmony_ci/// - [POSIX] 54b8a62b91Sopenharmony_ci/// - [Linux] 55b8a62b91Sopenharmony_ci/// - [Apple] 56b8a62b91Sopenharmony_ci/// - [Winsock2] 57b8a62b91Sopenharmony_ci/// 58b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html 59b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/socket.2.html 60b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socket.2.html 61b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket 62b8a62b91Sopenharmony_ci#[inline] 63b8a62b91Sopenharmony_cipub fn socket_with( 64b8a62b91Sopenharmony_ci domain: AddressFamily, 65b8a62b91Sopenharmony_ci type_: SocketType, 66b8a62b91Sopenharmony_ci flags: SocketFlags, 67b8a62b91Sopenharmony_ci protocol: Protocol, 68b8a62b91Sopenharmony_ci) -> io::Result<OwnedFd> { 69b8a62b91Sopenharmony_ci backend::net::syscalls::socket_with(domain, type_, flags, protocol) 70b8a62b91Sopenharmony_ci} 71b8a62b91Sopenharmony_ci 72b8a62b91Sopenharmony_ci/// `bind(sockfd, addr)`—Binds a socket to an IP address. 73b8a62b91Sopenharmony_ci/// 74b8a62b91Sopenharmony_ci/// # References 75b8a62b91Sopenharmony_ci/// - [POSIX] 76b8a62b91Sopenharmony_ci/// - [Linux] 77b8a62b91Sopenharmony_ci/// - [Apple] 78b8a62b91Sopenharmony_ci/// - [Winsock2] 79b8a62b91Sopenharmony_ci/// 80b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html 81b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html 82b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html 83b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind 84b8a62b91Sopenharmony_cipub fn bind<Fd: AsFd>(sockfd: Fd, addr: &SocketAddr) -> io::Result<()> { 85b8a62b91Sopenharmony_ci _bind(sockfd.as_fd(), addr) 86b8a62b91Sopenharmony_ci} 87b8a62b91Sopenharmony_ci 88b8a62b91Sopenharmony_cifn _bind(sockfd: BorrowedFd<'_>, addr: &SocketAddr) -> io::Result<()> { 89b8a62b91Sopenharmony_ci match addr { 90b8a62b91Sopenharmony_ci SocketAddr::V4(v4) => backend::net::syscalls::bind_v4(sockfd, v4), 91b8a62b91Sopenharmony_ci SocketAddr::V6(v6) => backend::net::syscalls::bind_v6(sockfd, v6), 92b8a62b91Sopenharmony_ci } 93b8a62b91Sopenharmony_ci} 94b8a62b91Sopenharmony_ci 95b8a62b91Sopenharmony_ci/// `bind(sockfd, addr)`—Binds a socket to an address. 96b8a62b91Sopenharmony_ci/// 97b8a62b91Sopenharmony_ci/// # References 98b8a62b91Sopenharmony_ci/// - [POSIX] 99b8a62b91Sopenharmony_ci/// - [Linux] 100b8a62b91Sopenharmony_ci/// - [Apple] 101b8a62b91Sopenharmony_ci/// - [Winsock2] 102b8a62b91Sopenharmony_ci/// 103b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html 104b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html 105b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html 106b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind 107b8a62b91Sopenharmony_ci#[doc(alias = "bind")] 108b8a62b91Sopenharmony_cipub fn bind_any<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrAny) -> io::Result<()> { 109b8a62b91Sopenharmony_ci _bind_any(sockfd.as_fd(), addr) 110b8a62b91Sopenharmony_ci} 111b8a62b91Sopenharmony_ci 112b8a62b91Sopenharmony_cifn _bind_any(sockfd: BorrowedFd<'_>, addr: &SocketAddrAny) -> io::Result<()> { 113b8a62b91Sopenharmony_ci match addr { 114b8a62b91Sopenharmony_ci SocketAddrAny::V4(v4) => backend::net::syscalls::bind_v4(sockfd, v4), 115b8a62b91Sopenharmony_ci SocketAddrAny::V6(v6) => backend::net::syscalls::bind_v6(sockfd, v6), 116b8a62b91Sopenharmony_ci #[cfg(unix)] 117b8a62b91Sopenharmony_ci SocketAddrAny::Unix(unix) => backend::net::syscalls::bind_unix(sockfd, unix), 118b8a62b91Sopenharmony_ci } 119b8a62b91Sopenharmony_ci} 120b8a62b91Sopenharmony_ci 121b8a62b91Sopenharmony_ci/// `bind(sockfd, addr, sizeof(struct sockaddr_in))`—Binds a socket to an 122b8a62b91Sopenharmony_ci/// IPv4 address. 123b8a62b91Sopenharmony_ci/// 124b8a62b91Sopenharmony_ci/// # References 125b8a62b91Sopenharmony_ci/// - [POSIX] 126b8a62b91Sopenharmony_ci/// - [Linux] 127b8a62b91Sopenharmony_ci/// - [Apple] 128b8a62b91Sopenharmony_ci/// - [Winsock2] 129b8a62b91Sopenharmony_ci/// 130b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html 131b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html 132b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html 133b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind 134b8a62b91Sopenharmony_ci#[inline] 135b8a62b91Sopenharmony_ci#[doc(alias = "bind")] 136b8a62b91Sopenharmony_cipub fn bind_v4<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrV4) -> io::Result<()> { 137b8a62b91Sopenharmony_ci backend::net::syscalls::bind_v4(sockfd.as_fd(), addr) 138b8a62b91Sopenharmony_ci} 139b8a62b91Sopenharmony_ci 140b8a62b91Sopenharmony_ci/// `bind(sockfd, addr, sizeof(struct sockaddr_in6))`—Binds a socket to an 141b8a62b91Sopenharmony_ci/// IPv6 address. 142b8a62b91Sopenharmony_ci/// 143b8a62b91Sopenharmony_ci/// # References 144b8a62b91Sopenharmony_ci/// - [POSIX] 145b8a62b91Sopenharmony_ci/// - [Linux] 146b8a62b91Sopenharmony_ci/// - [Apple] 147b8a62b91Sopenharmony_ci/// - [Winsock2] 148b8a62b91Sopenharmony_ci/// 149b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html 150b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html 151b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html 152b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind 153b8a62b91Sopenharmony_ci#[inline] 154b8a62b91Sopenharmony_ci#[doc(alias = "bind")] 155b8a62b91Sopenharmony_cipub fn bind_v6<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrV6) -> io::Result<()> { 156b8a62b91Sopenharmony_ci backend::net::syscalls::bind_v6(sockfd.as_fd(), addr) 157b8a62b91Sopenharmony_ci} 158b8a62b91Sopenharmony_ci 159b8a62b91Sopenharmony_ci/// `bind(sockfd, addr, sizeof(struct sockaddr_un))`—Binds a socket to a 160b8a62b91Sopenharmony_ci/// Unix-domain address. 161b8a62b91Sopenharmony_ci/// 162b8a62b91Sopenharmony_ci/// # References 163b8a62b91Sopenharmony_ci/// - [POSIX] 164b8a62b91Sopenharmony_ci/// - [Linux] 165b8a62b91Sopenharmony_ci/// - [Apple] 166b8a62b91Sopenharmony_ci/// - [Winsock2] 167b8a62b91Sopenharmony_ci/// 168b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html 169b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html 170b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html 171b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind 172b8a62b91Sopenharmony_ci#[cfg(unix)] 173b8a62b91Sopenharmony_ci#[inline] 174b8a62b91Sopenharmony_ci#[doc(alias = "bind")] 175b8a62b91Sopenharmony_cipub fn bind_unix<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrUnix) -> io::Result<()> { 176b8a62b91Sopenharmony_ci backend::net::syscalls::bind_unix(sockfd.as_fd(), addr) 177b8a62b91Sopenharmony_ci} 178b8a62b91Sopenharmony_ci 179b8a62b91Sopenharmony_ci/// `connect(sockfd, addr)`—Initiates a connection to an IP address. 180b8a62b91Sopenharmony_ci/// 181b8a62b91Sopenharmony_ci/// # References 182b8a62b91Sopenharmony_ci/// - [POSIX] 183b8a62b91Sopenharmony_ci/// - [Linux] 184b8a62b91Sopenharmony_ci/// - [Apple] 185b8a62b91Sopenharmony_ci/// - [Winsock2] 186b8a62b91Sopenharmony_ci/// 187b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html 188b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/connect.2.html 189b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html 190b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect 191b8a62b91Sopenharmony_cipub fn connect<Fd: AsFd>(sockfd: Fd, addr: &SocketAddr) -> io::Result<()> { 192b8a62b91Sopenharmony_ci _connect(sockfd.as_fd(), addr) 193b8a62b91Sopenharmony_ci} 194b8a62b91Sopenharmony_ci 195b8a62b91Sopenharmony_cifn _connect(sockfd: BorrowedFd<'_>, addr: &SocketAddr) -> io::Result<()> { 196b8a62b91Sopenharmony_ci match addr { 197b8a62b91Sopenharmony_ci SocketAddr::V4(v4) => backend::net::syscalls::connect_v4(sockfd, v4), 198b8a62b91Sopenharmony_ci SocketAddr::V6(v6) => backend::net::syscalls::connect_v6(sockfd, v6), 199b8a62b91Sopenharmony_ci } 200b8a62b91Sopenharmony_ci} 201b8a62b91Sopenharmony_ci 202b8a62b91Sopenharmony_ci/// `connect(sockfd, addr)`—Initiates a connection. 203b8a62b91Sopenharmony_ci/// 204b8a62b91Sopenharmony_ci/// # References 205b8a62b91Sopenharmony_ci/// - [POSIX] 206b8a62b91Sopenharmony_ci/// - [Linux] 207b8a62b91Sopenharmony_ci/// - [Apple] 208b8a62b91Sopenharmony_ci/// - [Winsock2] 209b8a62b91Sopenharmony_ci/// 210b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html 211b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/connect.2.html 212b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html 213b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect 214b8a62b91Sopenharmony_ci#[doc(alias = "connect")] 215b8a62b91Sopenharmony_cipub fn connect_any<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrAny) -> io::Result<()> { 216b8a62b91Sopenharmony_ci _connect_any(sockfd.as_fd(), addr) 217b8a62b91Sopenharmony_ci} 218b8a62b91Sopenharmony_ci 219b8a62b91Sopenharmony_cifn _connect_any(sockfd: BorrowedFd<'_>, addr: &SocketAddrAny) -> io::Result<()> { 220b8a62b91Sopenharmony_ci match addr { 221b8a62b91Sopenharmony_ci SocketAddrAny::V4(v4) => backend::net::syscalls::connect_v4(sockfd, v4), 222b8a62b91Sopenharmony_ci SocketAddrAny::V6(v6) => backend::net::syscalls::connect_v6(sockfd, v6), 223b8a62b91Sopenharmony_ci #[cfg(unix)] 224b8a62b91Sopenharmony_ci SocketAddrAny::Unix(unix) => backend::net::syscalls::connect_unix(sockfd, unix), 225b8a62b91Sopenharmony_ci } 226b8a62b91Sopenharmony_ci} 227b8a62b91Sopenharmony_ci 228b8a62b91Sopenharmony_ci/// `connect(sockfd, addr, sizeof(struct sockaddr_in))`—Initiates a 229b8a62b91Sopenharmony_ci/// connection to an IPv4 address. 230b8a62b91Sopenharmony_ci/// 231b8a62b91Sopenharmony_ci/// # References 232b8a62b91Sopenharmony_ci/// - [POSIX] 233b8a62b91Sopenharmony_ci/// - [Linux] 234b8a62b91Sopenharmony_ci/// - [Apple] 235b8a62b91Sopenharmony_ci/// - [Winsock2] 236b8a62b91Sopenharmony_ci/// 237b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html 238b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/connect.2.html 239b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html 240b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect 241b8a62b91Sopenharmony_ci#[inline] 242b8a62b91Sopenharmony_ci#[doc(alias = "connect")] 243b8a62b91Sopenharmony_cipub fn connect_v4<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrV4) -> io::Result<()> { 244b8a62b91Sopenharmony_ci backend::net::syscalls::connect_v4(sockfd.as_fd(), addr) 245b8a62b91Sopenharmony_ci} 246b8a62b91Sopenharmony_ci 247b8a62b91Sopenharmony_ci/// `connect(sockfd, addr, sizeof(struct sockaddr_in6))`—Initiates a 248b8a62b91Sopenharmony_ci/// connection to an IPv6 address. 249b8a62b91Sopenharmony_ci/// 250b8a62b91Sopenharmony_ci/// # References 251b8a62b91Sopenharmony_ci/// - [POSIX] 252b8a62b91Sopenharmony_ci/// - [Linux] 253b8a62b91Sopenharmony_ci/// - [Apple] 254b8a62b91Sopenharmony_ci/// - [Winsock2] 255b8a62b91Sopenharmony_ci/// 256b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html 257b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/connect.2.html 258b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html 259b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect 260b8a62b91Sopenharmony_ci#[inline] 261b8a62b91Sopenharmony_ci#[doc(alias = "connect")] 262b8a62b91Sopenharmony_cipub fn connect_v6<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrV6) -> io::Result<()> { 263b8a62b91Sopenharmony_ci backend::net::syscalls::connect_v6(sockfd.as_fd(), addr) 264b8a62b91Sopenharmony_ci} 265b8a62b91Sopenharmony_ci 266b8a62b91Sopenharmony_ci/// `connect(sockfd, addr, sizeof(struct sockaddr_un))`—Initiates a 267b8a62b91Sopenharmony_ci/// connection to a Unix-domain address. 268b8a62b91Sopenharmony_ci/// 269b8a62b91Sopenharmony_ci/// # References 270b8a62b91Sopenharmony_ci/// - [POSIX] 271b8a62b91Sopenharmony_ci/// - [Linux] 272b8a62b91Sopenharmony_ci/// - [Apple] 273b8a62b91Sopenharmony_ci/// - [Winsock2] 274b8a62b91Sopenharmony_ci/// 275b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html 276b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/connect.2.html 277b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html 278b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect 279b8a62b91Sopenharmony_ci#[cfg(unix)] 280b8a62b91Sopenharmony_ci#[inline] 281b8a62b91Sopenharmony_ci#[doc(alias = "connect")] 282b8a62b91Sopenharmony_cipub fn connect_unix<Fd: AsFd>(sockfd: Fd, addr: &SocketAddrUnix) -> io::Result<()> { 283b8a62b91Sopenharmony_ci backend::net::syscalls::connect_unix(sockfd.as_fd(), addr) 284b8a62b91Sopenharmony_ci} 285b8a62b91Sopenharmony_ci 286b8a62b91Sopenharmony_ci/// `listen(fd, backlog)`—Enables listening for incoming connections. 287b8a62b91Sopenharmony_ci/// 288b8a62b91Sopenharmony_ci/// # References 289b8a62b91Sopenharmony_ci/// - [POSIX] 290b8a62b91Sopenharmony_ci/// - [Linux] 291b8a62b91Sopenharmony_ci/// - [Apple] 292b8a62b91Sopenharmony_ci/// - [Winsock2] 293b8a62b91Sopenharmony_ci/// 294b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.html 295b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/listen.2.html 296b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/listen.2.html 297b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen 298b8a62b91Sopenharmony_ci#[inline] 299b8a62b91Sopenharmony_cipub fn listen<Fd: AsFd>(sockfd: Fd, backlog: i32) -> io::Result<()> { 300b8a62b91Sopenharmony_ci backend::net::syscalls::listen(sockfd.as_fd(), backlog) 301b8a62b91Sopenharmony_ci} 302b8a62b91Sopenharmony_ci 303b8a62b91Sopenharmony_ci/// `accept(fd, NULL, NULL)`—Accepts an incoming connection. 304b8a62b91Sopenharmony_ci/// 305b8a62b91Sopenharmony_ci/// Use [`acceptfrom`] to retrieve the peer address. 306b8a62b91Sopenharmony_ci/// 307b8a62b91Sopenharmony_ci/// POSIX guarantees that `accept` will use the lowest unused file descriptor, 308b8a62b91Sopenharmony_ci/// however it is not safe in general to rely on this, as file descriptors may 309b8a62b91Sopenharmony_ci/// be unexpectedly allocated on other threads or in libraries. 310b8a62b91Sopenharmony_ci/// 311b8a62b91Sopenharmony_ci/// # References 312b8a62b91Sopenharmony_ci/// - [POSIX] 313b8a62b91Sopenharmony_ci/// - [Linux] 314b8a62b91Sopenharmony_ci/// - [Apple] 315b8a62b91Sopenharmony_ci/// - [Winsock2] 316b8a62b91Sopenharmony_ci/// 317b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.html 318b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/accept.2.html 319b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept.2.html 320b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-accept 321b8a62b91Sopenharmony_ci#[inline] 322b8a62b91Sopenharmony_ci#[doc(alias = "accept4")] 323b8a62b91Sopenharmony_cipub fn accept<Fd: AsFd>(sockfd: Fd) -> io::Result<OwnedFd> { 324b8a62b91Sopenharmony_ci backend::net::syscalls::accept(sockfd.as_fd()) 325b8a62b91Sopenharmony_ci} 326b8a62b91Sopenharmony_ci 327b8a62b91Sopenharmony_ci/// `accept4(fd, NULL, NULL, flags)`—Accepts an incoming connection, with 328b8a62b91Sopenharmony_ci/// flags. 329b8a62b91Sopenharmony_ci/// 330b8a62b91Sopenharmony_ci/// Use [`acceptfrom_with`] to retrieve the peer address. 331b8a62b91Sopenharmony_ci/// 332b8a62b91Sopenharmony_ci/// Even though POSIX guarantees that this will use the lowest unused file 333b8a62b91Sopenharmony_ci/// descriptor, it is not safe in general to rely on this, as file descriptors 334b8a62b91Sopenharmony_ci/// may be unexpectedly allocated on other threads or in libraries. 335b8a62b91Sopenharmony_ci/// 336b8a62b91Sopenharmony_ci/// `accept_with` is the same as [`accept`] but adds an additional flags 337b8a62b91Sopenharmony_ci/// operand. 338b8a62b91Sopenharmony_ci/// 339b8a62b91Sopenharmony_ci/// # References 340b8a62b91Sopenharmony_ci/// - [Linux] 341b8a62b91Sopenharmony_ci/// 342b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/accept4.2.html 343b8a62b91Sopenharmony_ci#[inline] 344b8a62b91Sopenharmony_ci#[doc(alias = "accept4")] 345b8a62b91Sopenharmony_cipub fn accept_with<Fd: AsFd>(sockfd: Fd, flags: AcceptFlags) -> io::Result<OwnedFd> { 346b8a62b91Sopenharmony_ci backend::net::syscalls::accept_with(sockfd.as_fd(), flags) 347b8a62b91Sopenharmony_ci} 348b8a62b91Sopenharmony_ci 349b8a62b91Sopenharmony_ci/// `accept(fd, &addr, &len)`—Accepts an incoming connection and returns the 350b8a62b91Sopenharmony_ci/// peer address. 351b8a62b91Sopenharmony_ci/// 352b8a62b91Sopenharmony_ci/// Use [`accept`] if the peer address isn't needed. 353b8a62b91Sopenharmony_ci/// 354b8a62b91Sopenharmony_ci/// # References 355b8a62b91Sopenharmony_ci/// - [POSIX] 356b8a62b91Sopenharmony_ci/// - [Linux] 357b8a62b91Sopenharmony_ci/// - [Apple] 358b8a62b91Sopenharmony_ci/// - [Winsock2] 359b8a62b91Sopenharmony_ci/// 360b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.html 361b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/accept.2.html 362b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept.2.html 363b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-accept 364b8a62b91Sopenharmony_ci#[inline] 365b8a62b91Sopenharmony_ci#[doc(alias = "accept4")] 366b8a62b91Sopenharmony_cipub fn acceptfrom<Fd: AsFd>(sockfd: Fd) -> io::Result<(OwnedFd, Option<SocketAddrAny>)> { 367b8a62b91Sopenharmony_ci backend::net::syscalls::acceptfrom(sockfd.as_fd()) 368b8a62b91Sopenharmony_ci} 369b8a62b91Sopenharmony_ci 370b8a62b91Sopenharmony_ci/// `accept4(fd, &addr, &len, flags)`—Accepts an incoming connection and 371b8a62b91Sopenharmony_ci/// returns the peer address, with flags. 372b8a62b91Sopenharmony_ci/// 373b8a62b91Sopenharmony_ci/// Use [`accept_with`] if the peer address isn't needed. 374b8a62b91Sopenharmony_ci/// 375b8a62b91Sopenharmony_ci/// `acceptfrom_with` is the same as [`acceptfrom`] but adds an additional 376b8a62b91Sopenharmony_ci/// flags operand. 377b8a62b91Sopenharmony_ci/// 378b8a62b91Sopenharmony_ci/// # References 379b8a62b91Sopenharmony_ci/// - [Linux] 380b8a62b91Sopenharmony_ci/// 381b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/accept4.2.html 382b8a62b91Sopenharmony_ci#[inline] 383b8a62b91Sopenharmony_ci#[doc(alias = "accept4")] 384b8a62b91Sopenharmony_cipub fn acceptfrom_with<Fd: AsFd>( 385b8a62b91Sopenharmony_ci sockfd: Fd, 386b8a62b91Sopenharmony_ci flags: AcceptFlags, 387b8a62b91Sopenharmony_ci) -> io::Result<(OwnedFd, Option<SocketAddrAny>)> { 388b8a62b91Sopenharmony_ci backend::net::syscalls::acceptfrom_with(sockfd.as_fd(), flags) 389b8a62b91Sopenharmony_ci} 390b8a62b91Sopenharmony_ci 391b8a62b91Sopenharmony_ci/// `shutdown(fd, how)`—Closes the read and/or write sides of a stream. 392b8a62b91Sopenharmony_ci/// 393b8a62b91Sopenharmony_ci/// # References 394b8a62b91Sopenharmony_ci/// - [POSIX] 395b8a62b91Sopenharmony_ci/// - [Linux] 396b8a62b91Sopenharmony_ci/// - [Apple] 397b8a62b91Sopenharmony_ci/// - [Winsock2] 398b8a62b91Sopenharmony_ci/// 399b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/shutdown.html 400b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/shutdown.2.html 401b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/shutdown.2.html 402b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-shutdown 403b8a62b91Sopenharmony_ci#[inline] 404b8a62b91Sopenharmony_cipub fn shutdown<Fd: AsFd>(sockfd: Fd, how: Shutdown) -> io::Result<()> { 405b8a62b91Sopenharmony_ci backend::net::syscalls::shutdown(sockfd.as_fd(), how) 406b8a62b91Sopenharmony_ci} 407b8a62b91Sopenharmony_ci 408b8a62b91Sopenharmony_ci/// `getsockname(fd, addr, len)`—Returns the address a socket is bound to. 409b8a62b91Sopenharmony_ci/// 410b8a62b91Sopenharmony_ci/// # References 411b8a62b91Sopenharmony_ci/// - [POSIX] 412b8a62b91Sopenharmony_ci/// - [Linux] 413b8a62b91Sopenharmony_ci/// - [Apple] 414b8a62b91Sopenharmony_ci/// - [Winsock2] 415b8a62b91Sopenharmony_ci/// 416b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockname.html 417b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/getsockname.2.html 418b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getsockname.2.html 419b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getsockname 420b8a62b91Sopenharmony_ci#[inline] 421b8a62b91Sopenharmony_cipub fn getsockname<Fd: AsFd>(sockfd: Fd) -> io::Result<SocketAddrAny> { 422b8a62b91Sopenharmony_ci backend::net::syscalls::getsockname(sockfd.as_fd()) 423b8a62b91Sopenharmony_ci} 424b8a62b91Sopenharmony_ci 425b8a62b91Sopenharmony_ci/// `getpeername(fd, addr, len)`—Returns the address a socket is connected 426b8a62b91Sopenharmony_ci/// to. 427b8a62b91Sopenharmony_ci/// 428b8a62b91Sopenharmony_ci/// # References 429b8a62b91Sopenharmony_ci/// - [POSIX] 430b8a62b91Sopenharmony_ci/// - [Linux] 431b8a62b91Sopenharmony_ci/// - [Apple] 432b8a62b91Sopenharmony_ci/// - [Winsock2] 433b8a62b91Sopenharmony_ci/// 434b8a62b91Sopenharmony_ci/// [POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpeername.html 435b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/getpeername.2.html 436b8a62b91Sopenharmony_ci/// [Apple]: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpeername.2.html 437b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getpeername 438b8a62b91Sopenharmony_ci#[inline] 439b8a62b91Sopenharmony_cipub fn getpeername<Fd: AsFd>(sockfd: Fd) -> io::Result<Option<SocketAddrAny>> { 440b8a62b91Sopenharmony_ci backend::net::syscalls::getpeername(sockfd.as_fd()) 441b8a62b91Sopenharmony_ci} 442