SNode.C
Loading...
Searching...
No Matches
net::in6::SocketAddrInfo Class Reference

#include <SocketAddrInfo.h>

Collaboration diagram for net::in6::SocketAddrInfo:

Public Member Functions

 SocketAddrInfo ()=default
 
 ~SocketAddrInfo ()
 
int resolve (const std::string &node, const std::string &service, const addrinfo &hints)
 
bool useNext ()
 
sockaddr_in6 getSockAddr ()
 
std::string getCanonName ()
 
void logAddressInfo ()
 

Private Attributes

struct addrinfo * addrInfo = nullptr
 
struct addrinfo * currentAddrInfo = nullptr
 

Detailed Description

Definition at line 57 of file SocketAddrInfo.h.

Constructor & Destructor Documentation

◆ SocketAddrInfo()

net::in6::SocketAddrInfo::SocketAddrInfo ( )
default

◆ ~SocketAddrInfo()

net::in6::SocketAddrInfo::~SocketAddrInfo ( )

Definition at line 55 of file SocketAddrInfo.cpp.

55 {
56 if (addrInfo != nullptr) {
58 }
59 }
struct addrinfo * addrInfo
void freeaddrinfo(struct addrinfo *res)
Definition netdb.cpp:67

Member Function Documentation

◆ getCanonName()

std::string net::in6::SocketAddrInfo::getCanonName ( )

Definition at line 90 of file SocketAddrInfo.cpp.

90 {
91 return currentAddrInfo->ai_canonname != nullptr ? currentAddrInfo->ai_canonname : std::string{};
92 }
struct addrinfo * currentAddrInfo

◆ getSockAddr()

sockaddr_in6 net::in6::SocketAddrInfo::getSockAddr ( )

Definition at line 84 of file SocketAddrInfo.cpp.

84 {
85 return currentAddrInfo != nullptr
86 ? *reinterpret_cast<sockaddr_in6*>(currentAddrInfo->ai_addr) // cppcheck-suppress internalAstError
87 : sockaddr_in6{.sin6_family = AF_INET6, .sin6_port{}, .sin6_flowinfo{}, .sin6_addr{}, .sin6_scope_id{}};
88 }

◆ logAddressInfo()

void net::in6::SocketAddrInfo::logAddressInfo ( )

Definition at line 94 of file SocketAddrInfo.cpp.

94 {
95 if (currentAddrInfo != nullptr) {
96 static char hostBfr[NI_MAXHOST];
97 static char servBfr[NI_MAXSERV];
98 std::memset(hostBfr, 0, NI_MAXHOST);
99 std::memset(servBfr, 0, NI_MAXSERV);
100
102 currentAddrInfo->ai_addrlen,
103 hostBfr,
104 sizeof(hostBfr),
105 servBfr,
106 sizeof(servBfr),
107 NI_NUMERICHOST | NI_NUMERICSERV);
108
109 struct sockaddr_in* aiAddr = reinterpret_cast<sockaddr_in*>(currentAddrInfo->ai_addr);
110
111 const std::string format = "AddressInfo:\n"
112 " ai_next = %v\n"
113 " ai_flags = %v\n"
114 " ai_family = %v (PF_INET = %v, PF_INET6 = %v)\n"
115 " ai_socktype = %v (SOCK_STREAM = %v, SOCK_DGRAM = %v)\n"
116 " ai_protocol = %v (IPPROTO_TCP = %v, IPPROTO_UDP = %v)\n"
117 " ai_addrlen = %v (sockaddr_in = %v, "
118 "sockaddr_in6 = %v)\n"
119 " ai_addr = sin_family: %v (AF_INET = %v, "
120 "AF_INET6 = %v)\n"
121 " sin_addr: %v\n"
122 " sin_port: %v";
123
124 el::Loggers::getLogger("default")->trace(format.c_str(),
125 currentAddrInfo->ai_next,
126 currentAddrInfo->ai_flags,
127 currentAddrInfo->ai_family,
128 PF_INET,
129 PF_INET6,
130 currentAddrInfo->ai_socktype,
131 SOCK_STREAM,
132 SOCK_DGRAM,
133 currentAddrInfo->ai_protocol,
134 IPPROTO_TCP,
135 IPPROTO_UDP,
136 currentAddrInfo->ai_addrlen,
137 sizeof(struct sockaddr_in),
138 sizeof(struct sockaddr_in6),
139 aiAddr->sin_family,
140 AF_INET,
141 AF_INET6,
142 hostBfr,
143 servBfr);
144 }
145 }
int getnameinfo(const sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
Definition netdb.cpp:72

◆ resolve()

int net::in6::SocketAddrInfo::resolve ( const std::string & node,
const std::string & service,
const addrinfo & hints )

Definition at line 61 of file SocketAddrInfo.cpp.

61 {
62 if (addrInfo != nullptr) {
64 addrInfo = nullptr;
65 }
66
67 int aiErrCode = 0;
68
69 if ((aiErrCode = core::system::getaddrinfo(node.c_str(), service.c_str(), &hints, &addrInfo)) == 0) {
71 }
72
73 return aiErrCode;
74 }
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
Definition netdb.cpp:62

◆ useNext()

bool net::in6::SocketAddrInfo::useNext ( )

Definition at line 76 of file SocketAddrInfo.cpp.

76 {
77 if (currentAddrInfo != nullptr) {
79 }
80
81 return currentAddrInfo != nullptr;
82 }

Member Data Documentation

◆ addrInfo

struct addrinfo* net::in6::SocketAddrInfo::addrInfo = nullptr
private

Definition at line 72 of file SocketAddrInfo.h.

◆ currentAddrInfo

struct addrinfo* net::in6::SocketAddrInfo::currentAddrInfo = nullptr
private

Definition at line 73 of file SocketAddrInfo.h.


The documentation for this class was generated from the following files: