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

Function lwip_bind

components/net/lwip/lwip-2.1.2/src/api/sockets.c:739–791  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

737}
738
739int
740lwip_bind(int s, const struct sockaddr *name, socklen_t namelen)
741{
742 struct lwip_sock *sock;
743 ip_addr_t local_addr;
744 u16_t local_port;
745 err_t err;
746
747 sock = get_socket(s);
748 if (!sock) {
749 return -1;
750 }
751
752 if (!SOCK_ADDR_TYPE_MATCH(name, sock)) {
753 /* sockaddr does not match socket type (IPv4/IPv6) */
754 sock_set_errno(sock, err_to_errno(ERR_VAL));
755 done_socket(sock);
756 return -1;
757 }
758
759 /* check size, family and alignment of 'name' */
760 LWIP_ERROR("lwip_bind: invalid address", (IS_SOCK_ADDR_LEN_VALID(namelen) &&
761 IS_SOCK_ADDR_TYPE_VALID(name) && IS_SOCK_ADDR_ALIGNED(name)),
762 sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
763 LWIP_UNUSED_ARG(namelen);
764
765 SOCKADDR_TO_IPADDR_PORT(name, &local_addr, local_port);
766 LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d, addr=", s));
767 ip_addr_debug_print_val(SOCKETS_DEBUG, local_addr);
768 LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", local_port));
769
770#if LWIP_IPV4 && LWIP_IPV6
771 /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */
772 if (IP_IS_V6_VAL(local_addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&local_addr))) {
773 unmap_ipv4_mapped_ipv6(ip_2_ip4(&local_addr), ip_2_ip6(&local_addr));
774 IP_SET_TYPE_VAL(local_addr, IPADDR_TYPE_V4);
775 }
776#endif /* LWIP_IPV4 && LWIP_IPV6 */
777
778 err = netconn_bind(sock->conn, &local_addr, local_port);
779
780 if (err != ERR_OK) {
781 LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) failed, err=%d\n", s, err));
782 sock_set_errno(sock, err_to_errno(err));
783 done_socket(sock);
784 return -1;
785 }
786
787 LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) succeeded\n", s));
788 sock_set_errno(sock, 0);
789 done_socket(sock);
790 return 0;
791}
792
793int
794lwip_close(int s)

Callers 9

test_sockets_msgapi_tcpFunction · 0.50
test_sockets_msgapi_udpFunction · 0.50
test_sockets_msgapi_cmsgFunction · 0.50
START_TESTFunction · 0.50
lwip_netdev_pingFunction · 0.50
tcp_server_entryFunction · 0.50
udp_client_entryFunction · 0.50
udp_server_entryFunction · 0.50

Calls 4

done_socketFunction · 0.85
get_socketFunction · 0.70
err_to_errnoFunction · 0.70
netconn_bindFunction · 0.70

Tested by 5

test_sockets_msgapi_tcpFunction · 0.40
test_sockets_msgapi_udpFunction · 0.40
test_sockets_msgapi_cmsgFunction · 0.40
START_TESTFunction · 0.40