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

Method sockGetPeerAddr

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

Source from the content-addressed store, hash-verified

2091}
2092
2093WasiExpect<void>
2094INode::sockGetPeerAddr(__wasi_address_family_t *AddressFamilyPtr,
2095 Span<uint8_t> Address,
2096 uint16_t *PortPtr) const noexcept {
2097 EXPECTED_TRY(detail::ensureWSAStartup());
2098
2099 Variant<sockaddr, sockaddr_in, sockaddr_in6, sockaddr_storage> SocketAddr;
2100 socklen_t Slen = sizeof(SocketAddr);
2101
2102 if (auto Res = getpeername(Socket, &SocketAddr.get<sockaddr>(), &Slen);
2103 unlikely(Res == SOCKET_ERROR_)) {
2104 return WasiUnexpect(detail::fromWSALastError());
2105 }
2106
2107 switch (SocketAddr.get<sockaddr_storage>().ss_family) {
2108 case AF_INET: {
2109 if (Address.size() < sizeof(in_addr)) {
2110 return WasiUnexpect(__WASI_ERRNO_NOMEM);
2111 }
2112 const auto &SocketAddr4 = SocketAddr.get<sockaddr_in>();
2113 if (AddressFamilyPtr) {
2114 *AddressFamilyPtr = __WASI_ADDRESS_FAMILY_INET4;
2115 }
2116 if (PortPtr) {
2117 *PortPtr = ntohs(SocketAddr4.sin_port);
2118 }
2119 std::memcpy(Address.data(), &SocketAddr4.sin_addr, sizeof(in_addr));
2120 return {};
2121 }
2122 case AF_INET6: {
2123 if (Address.size() < sizeof(in6_addr)) {
2124 return WasiUnexpect(__WASI_ERRNO_NOMEM);
2125 }
2126 const auto &SocketAddr6 = SocketAddr.get<sockaddr_in6>();
2127 if (AddressFamilyPtr) {
2128 *AddressFamilyPtr = __WASI_ADDRESS_FAMILY_INET6;
2129 }
2130 if (PortPtr) {
2131 *PortPtr = ntohs(SocketAddr6.sin6_port);
2132 }
2133 std::memcpy(Address.data(), &SocketAddr6.sin6_addr, sizeof(in6_addr));
2134 return {};
2135 }
2136 default:
2137 return WasiUnexpect(__WASI_ERRNO_NOSYS);
2138 }
2139}
2140
2141WasiExpect<__wasi_filetype_t> INode::filetype() const noexcept {
2142 switch (fastGetFileType(Type, Handle)) {

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