MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / sys_sendto

Function sys_sendto

components/lwp/lwp_syscall.c:6050–6114  ·  view source on GitHub ↗

* @brief Sends data to a specific address using a socket. * * This system call is used to send data from a socket to a specified address. It is commonly * used with connectionless sockets (e.g., UDP) but can also be used with connection-oriented * sockets if the destination address needs to be overridden. * * @param[in] socket The socket descriptor used for sending data. It must be valid a

Source from the content-addressed store, hash-verified

6048 * @see sys_send(), sys_sendmsg(), sys_recvfrom()
6049 */
6050sysret_t sys_sendto(int socket, const void *dataptr, size_t size, int flags,
6051 const struct musl_sockaddr *to, socklen_t tolen)
6052{
6053 int flgs = 0;
6054#ifdef ARCH_MM_MMU
6055 int ret = -1;
6056 void *kmem = RT_NULL;
6057#endif
6058
6059 flgs = netflags_muslc_2_lwip(flags);
6060#ifdef ARCH_MM_MMU
6061 if (!size)
6062 {
6063 return -EINVAL;
6064 }
6065
6066 if (!lwp_user_accessable((void *)dataptr, size))
6067 {
6068 return -EFAULT;
6069 }
6070
6071 kmem = kmem_get(size);
6072 if (!kmem)
6073 {
6074 return -ENOMEM;
6075 }
6076
6077 lwp_get_from_user(kmem, (void *)dataptr, size);
6078
6079 if (to)
6080 {
6081 struct sockaddr sa;
6082 sockaddr_tolwip(to, &sa);
6083
6084 ret = sendto(socket, kmem, size, flgs, &sa, tolen);
6085 }
6086 else
6087 {
6088 ret = sendto(socket, kmem, size, flgs, NULL, tolen);
6089 }
6090
6091 if (ret < 0)
6092 {
6093 ret = GET_ERRNO();
6094 }
6095
6096 kmem_put(kmem);
6097
6098 return ret;
6099#else
6100 int ret;
6101 if (to)
6102 {
6103 struct sockaddr sa;
6104 sockaddr_tolwip(to, &sa);
6105
6106 ret = sendto(socket, dataptr, size, flgs, &sa, tolen);
6107 }

Callers

nothing calls this directly

Calls 7

netflags_muslc_2_lwipFunction · 0.85
lwp_user_accessableFunction · 0.85
kmem_getFunction · 0.85
lwp_get_from_userFunction · 0.85
sockaddr_tolwipFunction · 0.85
sendtoFunction · 0.85
kmem_putFunction · 0.85

Tested by

no test coverage detected