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

Function sys_bind

components/lwp/lwp_syscall.c:5162–5194  ·  view source on GitHub ↗

* @brief Binds a socket to a local address. * * This system call binds a socket to a specific local address and port. The socket must be created * using `sys_socket` before it can be bound. The `bind` operation allows the application to associate * a socket with a specific address, such as an IP address and port number, which can then be used * for sending or receiving data. * * @param[in]

Source from the content-addressed store, hash-verified

5160 * valid for the socket type.
5161 */
5162sysret_t sys_bind(int socket, const struct musl_sockaddr *name, socklen_t namelen)
5163{
5164 rt_err_t ret = 0;
5165 struct sockaddr sa;
5166 struct sockaddr_un un_addr;
5167 struct musl_sockaddr kname;
5168 rt_uint16_t family = 0;
5169
5170 if (!lwp_user_accessable((void *)name, namelen))
5171 {
5172 return -EFAULT;
5173 }
5174
5175 lwp_get_from_user(&family, (void *)name, 2);
5176 if (family == AF_UNIX)
5177 {
5178 lwp_get_from_user(&un_addr, (void *)name, sizeof(struct sockaddr_un));
5179 ret = bind(socket, (struct sockaddr *)&un_addr, namelen);
5180 }
5181 else if (family == AF_NETLINK)
5182 {
5183 lwp_get_from_user(&sa, (void *)name, namelen);
5184 ret = bind(socket, &sa, namelen);
5185 }
5186 else
5187 {
5188 lwp_get_from_user(&kname, (void *)name, namelen);
5189 sockaddr_tolwip(&kname, &sa);
5190 ret = bind(socket, &sa, namelen);
5191 }
5192
5193 return (ret < 0 ? GET_ERRNO() : ret);
5194}
5195
5196/**
5197 * @brief Shuts down part of a full-duplex connection.

Callers

nothing calls this directly

Calls 4

lwp_user_accessableFunction · 0.85
lwp_get_from_userFunction · 0.85
bindFunction · 0.85
sockaddr_tolwipFunction · 0.85

Tested by

no test coverage detected