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

Method sockGetLocalAddr

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

Source from the content-addressed store, hash-verified

2043}
2044
2045WasiExpect<void>
2046INode::sockGetLocalAddr(__wasi_address_family_t *AddressFamilyPtr,
2047 Span<uint8_t> Address,
2048 uint16_t *PortPtr) const noexcept {
2049 EXPECTED_TRY(detail::ensureWSAStartup());
2050
2051 Variant<sockaddr, sockaddr_in, sockaddr_in6, sockaddr_storage> SocketAddr;
2052 socklen_t Slen = sizeof(SocketAddr);
2053
2054 if (auto Res = getsockname(Socket, &SocketAddr.get<sockaddr>(), &Slen);
2055 unlikely(Res == SOCKET_ERROR_)) {
2056 return WasiUnexpect(detail::fromWSALastError());
2057 }
2058
2059 switch (SocketAddr.get<sockaddr_storage>().ss_family) {
2060 case AF_INET: {
2061 if (Address.size() < sizeof(in_addr)) {
2062 return WasiUnexpect(__WASI_ERRNO_NOMEM);
2063 }
2064 const auto &SocketAddr4 = SocketAddr.get<sockaddr_in>();
2065 if (AddressFamilyPtr) {
2066 *AddressFamilyPtr = __WASI_ADDRESS_FAMILY_INET4;
2067 }
2068 if (PortPtr) {
2069 *PortPtr = ntohs(SocketAddr4.sin_port);
2070 }
2071 std::memcpy(Address.data(), &SocketAddr4.sin_addr, sizeof(in_addr));
2072 return {};
2073 }
2074 case AF_INET6: {
2075 if (Address.size() < sizeof(in6_addr)) {
2076 return WasiUnexpect(__WASI_ERRNO_NOMEM);
2077 }
2078 const auto &SocketAddr6 = SocketAddr.get<sockaddr_in6>();
2079 if (AddressFamilyPtr) {
2080 *AddressFamilyPtr = __WASI_ADDRESS_FAMILY_INET6;
2081 }
2082 if (PortPtr) {
2083 *PortPtr = ntohs(SocketAddr6.sin6_port);
2084 }
2085 std::memcpy(Address.data(), &SocketAddr6.sin6_addr, sizeof(in6_addr));
2086 return {};
2087 }
2088 default:
2089 return WasiUnexpect(__WASI_ERRNO_NOSYS);
2090 }
2091}
2092
2093WasiExpect<void>
2094INode::sockGetPeerAddr(__wasi_address_family_t *AddressFamilyPtr,

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