Files
cKit/Foundation/c_SockAddrUtil.h
T
2026-09-08 10:35:16 +08:00

36 lines
1.1 KiB
C

#ifndef INCLUDED_C_SOCKADDRUTIL_H
#define INCLUDED_C_SOCKADDRUTIL_H
#ifndef INCLUDED_C_SOCKADDR_H
#include <c_SockAddr.h>
#endif /*INCLUDED_C_SOCKADDR_H*/
#ifndef INCLUDED_C_ADDRINFO_H
#include <c_AddrInfo.h>
#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*/