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

Method sockSendTo

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

Source from the content-addressed store, hash-verified

1163}
1164
1165WasiExpect<void> INode::sockSendTo(Span<Span<const uint8_t>> SiData,
1166 __wasi_siflags_t,
1167 __wasi_address_family_t AddressFamily,
1168 Span<const uint8_t> Address, uint16_t Port,
1169 __wasi_size_t &NWritten) const noexcept {
1170 int SysSiFlags = MSG_NOSIGNAL;
1171 sockaddr *ClientAddr = nullptr;
1172 socklen_t MsgNameLen = 0;
1173 VarAddrT AddressBuffer;
1174
1175 if (Address.size()) {
1176 AddressBuffer = sockAddressAssignHelper(AddressFamily, Address, Port);
1177 ClientAddr = std::visit(VarAddrBuf(), AddressBuffer);
1178 MsgNameLen = std::visit(VarAddrSize(), AddressBuffer);
1179 }
1180
1181 iovec SysIOVs[kIOVMax];
1182 size_t SysIOVsSize = 0;
1183 for (auto &IOV : SiData) {
1184 SysIOVs[SysIOVsSize].iov_base = const_cast<uint8_t *>(IOV.data());
1185 SysIOVs[SysIOVsSize].iov_len = IOV.size();
1186 ++SysIOVsSize;
1187 }
1188
1189 msghdr SysMsgHdr;
1190 SysMsgHdr.msg_name = MsgNameLen == 0 ? nullptr : ClientAddr;
1191 SysMsgHdr.msg_namelen = MsgNameLen;
1192 SysMsgHdr.msg_iov = SysIOVs;
1193 SysMsgHdr.msg_iovlen = SysIOVsSize;
1194 SysMsgHdr.msg_control = nullptr;
1195 SysMsgHdr.msg_controllen = 0;
1196
1197 // Store recv bytes length and flags.
1198 if (auto Res = ::sendmsg(Fd, &SysMsgHdr, SysSiFlags); unlikely(Res < 0)) {
1199 return WasiUnexpect(fromErrNo(errno));
1200 } else {
1201 NWritten = EndianValue(static_cast<__wasi_size_t>(Res)).le();
1202 }
1203
1204 return {};
1205}
1206
1207WasiExpect<void> INode::sockShutdown(__wasi_sdflags_t SdFlags) const noexcept {
1208 int SysFlags = 0;

Callers

nothing calls this directly

Calls 10

unlikelyFunction · 0.85
WasiUnexpectFunction · 0.85
EndianValueClass · 0.85
leMethod · 0.80
sockAddressAssignHelperFunction · 0.70
VarAddrBufClass · 0.70
VarAddrSizeClass · 0.70
fromErrNoFunction · 0.70
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected