MCPcopy Create free account
hub / github.com/WasmEdge/WasmEdge / sockConnect

Method sockConnect

lib/host/wasi/inode-win.cpp:1673–1708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1671}
1672
1673WasiExpect<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
1710WasiExpect<void> INode::sockRecv(Span<Span<uint8_t>> RiData,
1711 __wasi_riflags_t RiFlags, __wasi_size_t &NRead,

Callers 1

bodyMethod · 0.45

Calls 7

ensureWSAStartupFunction · 0.85
unlikelyFunction · 0.85
WasiUnexpectFunction · 0.85
fromWSALastErrorFunction · 0.85
EXPECTED_TRYFunction · 0.50
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected