#ifndef INCLUDED_C_SOCKADDRUTIL_H #define INCLUDED_C_SOCKADDRUTIL_H #ifndef INCLUDED_C_SOCKADDR_H #include #endif /*INCLUDED_C_SOCKADDR_H*/ #ifndef INCLUDED_C_ADDRINFO_H #include #endif /*INCLUDED_C_ADDRINFO_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ /** * @brief Extends extraction mapping from a resolved c_AddrInfo_t instance. */ C_STATIC_FORCE_INLINE c_err_t c_SockAddrUtil_FromAddrInfo(c_SockAddr_t* sock_addr, const c_AddrInfo_t* addr) { if (!sock_addr || !addr || !addr->addrinfo_p) return C_ERR_PARAM; size_t len = addr->addrinfo_p->ai_addrlen; if (addr->addrinfo_p->ai_family == AF_INET && len <= sizeof(struct sockaddr_in)) { memcpy(&sock_addr->ipv4, addr->addrinfo_p->ai_addr, len); return C_ERR_OK; } else if (addr->addrinfo_p->ai_family == AF_INET6 && len <= sizeof(struct sockaddr_in6)) { memcpy(&sock_addr->ipv6, addr->addrinfo_p->ai_addr, len); return C_ERR_OK; } return C_ERR_FAIL; } #endif /*INCLUDED_C_SOCKADDRUTIL_H*/