| 1671 | } |
| 1672 | |
| 1673 | WasiExpect<void> INode::sockConnect(__wasi_address_family_t AddressFamily, |
| 1674 | Span<const uint8_t> Address, |
| 1675 | uint16_t Port) noexcept { |
| 1676 | EXPECTED_TRY(detail::ensureWSAStartup()); |
| 1677 | |
| 1678 | Variant<sockaddr, sockaddr_in, sockaddr_in6> ClientAddr; |
| 1679 | size_t Size; |
| 1680 | |
| 1681 | if (AddressFamily == __WASI_ADDRESS_FAMILY_INET4) { |
| 1682 | auto &ClientAddr4 = ClientAddr.emplace<sockaddr_in>(); |
| 1683 | Size = sizeof(ClientAddr4); |
| 1684 | |
| 1685 | ClientAddr4.sin_family = AF_INET; |
| 1686 | ClientAddr4.sin_port = htons(Port); |
| 1687 | assuming(Address.size() >= sizeof(in_addr)); |
| 1688 | std::memcpy(&ClientAddr4.sin_addr, Address.data(), sizeof(in_addr)); |
| 1689 | } else if (AddressFamily == __WASI_ADDRESS_FAMILY_INET6) { |
| 1690 | auto &ClientAddr6 = ClientAddr.emplace<sockaddr_in6>(); |
| 1691 | Size = sizeof(ClientAddr6); |
| 1692 | |
| 1693 | ClientAddr6.sin6_family = AF_INET6; |
| 1694 | ClientAddr6.sin6_port = htons(Port); |
| 1695 | assuming(Address.size() >= sizeof(in6_addr)); |
| 1696 | std::memcpy(&ClientAddr6.sin6_addr, Address.data(), sizeof(in_addr)); |
| 1697 | } else { |
| 1698 | assumingUnreachable(); |
| 1699 | } |
| 1700 | |
| 1701 | if (auto Res = |
| 1702 | connect(Socket, &ClientAddr.get<sockaddr>(), static_cast<int>(Size)); |
| 1703 | unlikely(Res == SOCKET_ERROR_)) { |
| 1704 | return WasiUnexpect(detail::fromWSALastError()); |
| 1705 | } |
| 1706 | |
| 1707 | return {}; |
| 1708 | } |
| 1709 | |
| 1710 | WasiExpect<void> INode::sockRecv(Span<Span<uint8_t>> RiData, |
| 1711 | __wasi_riflags_t RiFlags, __wasi_size_t &NRead, |
no test coverage detected