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

Function sockAddressAssignHelper

lib/host/wasi/inode-linux.cpp:953–988  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

951};
952
953static VarAddrT sockAddressAssignHelper(__wasi_address_family_t AddrFamily,
954 const Span<const uint8_t> &Address,
955 uint16_t Port) {
956 VarAddrT Addr;
957 if (Address.size() == 0) {
958 Addr.emplace<SockEmptyAddr>();
959 } else if (AddrFamily == __WASI_ADDRESS_FAMILY_INET4) {
960 auto &ServerAddr4 = Addr.emplace<sockaddr_in>();
961
962 ServerAddr4.sin_family = AF_INET;
963 ServerAddr4.sin_port = htons(Port);
964 assuming(Address.size() >= sizeof(in_addr));
965 std::memcpy(&ServerAddr4.sin_addr, Address.data(), sizeof(in_addr));
966 } else if (AddrFamily == __WASI_ADDRESS_FAMILY_INET6) {
967 auto &ServerAddr6 = Addr.emplace<sockaddr_in6>();
968
969 ServerAddr6.sin6_family = AF_INET6;
970 ServerAddr6.sin6_port = htons(Port);
971 ServerAddr6.sin6_flowinfo = 0;
972 assuming(Address.size() >= sizeof(in6_addr));
973 std::memcpy(&ServerAddr6.sin6_addr, Address.data(), sizeof(in6_addr));
974 } else if (AddrFamily == __WASI_ADDRESS_FAMILY_AF_UNIX) {
975 auto &ServerAddrUN = Addr.emplace<sockaddr_un>();
976
977 ServerAddrUN.sun_family = AF_UNIX;
978 // The length of sockaddr_un::sun_path depends on the current system.
979 // We should always check its size.
980 assuming(Address.size() >= sizeof(sockaddr_un::sun_path));
981 std::memcpy(&ServerAddrUN.sun_path, Address.data(),
982 sizeof(sockaddr_un::sun_path));
983 } else {
984 assumingUnreachable();
985 }
986
987 return Addr;
988}
989
990WasiExpect<void> INode::sockBind(__wasi_address_family_t AddressFamily,
991 Span<const uint8_t> Address,

Callers 3

sockBindMethod · 0.70
sockConnectMethod · 0.70
sockSendToMethod · 0.70

Calls 2

sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected