4#ifdef USE_SOCKET_IMPL_LWIP_TCP
13 if (family == AF_INET) {
18 auto *addr =
reinterpret_cast<struct
sockaddr_in *
>(name);
20 *addrlen = addr->sin_len =
sizeof(
struct sockaddr_in);
21 addr->sin_port = htons(port_host);
22 inet_addr_from_ip4addr(&addr->sin_addr, ip_2_ip4(ip));
26 if (family == AF_INET6) {
31 auto *addr =
reinterpret_cast<struct
sockaddr_in6 *
>(name);
34 addr->sin6_port = htons(port_host);
38 ip4_2_ipv4_mapped_ipv6(ip_2_ip6(&mapped), ip_2_ip4(ip));
39 inet6_addr_from_ip6addr(&addr->sin6_addr, ip_2_ip6(&mapped));
41 inet6_addr_from_ip6addr(&addr->sin6_addr, ip_2_ip6(ip));
52 if (addrlen <
sizeof(
struct sockaddr))
55 memset(ip, 0,
sizeof(*ip));
57 auto *addr4 =
reinterpret_cast<const sockaddr_in *
>(addr);
58 *port = ntohs(addr4->sin_port);
60 ip_2_ip4(ip)->addr = addr4->sin_addr.s_addr;
67 auto *addr6 =
reinterpret_cast<const sockaddr_in6 *
>(addr);
68 *port = ntohs(addr6->sin6_port);
70 memcpy(&ip_2_ip6(ip)->addr, &addr6->sin6_addr.un.u8_addr, 16);
72 if (ip6_addr_isipv4mappedipv6(ip_2_ip6(ip))) {
73 unmap_ipv4_mapped_ipv6(ip_2_ip4(ip), ip_2_ip6(ip));
87 if (ok && family == AF_INET6 && ip_addr_isany_val(*ip))
88 IP_SET_TYPE_VAL(*ip, IPADDR_TYPE_ANY);
bool sockaddr_to_lwip(const struct sockaddr *addr, socklen_t addrlen, ip_addr_t *ip, uint16_t *port)
Convert sockaddr to lwip ip_addr_t and host-order port.
int lwip_err_to_errno(err_t err)
errno for a failed lwip call
bool sockaddr_to_lwip_bind(sa_family_t family, const struct sockaddr *addr, socklen_t addrlen, ip_addr_t *ip, uint16_t *port)
sockaddr_to_lwip variant for bind: promotes AF_INET6 sockets to IPADDR_TYPE_ANY so they accept both I...
int lwip_ip_to_sockaddr(sa_family_t family, const ip_addr_t *ip, uint16_t port_host, struct sockaddr *name, socklen_t *addrlen)
Convert lwip ip_addr_t + host-order port to sockaddr, based on the socket's address family.