40 const struct addrinfo *hintsp,
41 struct addrinfo **result);
44 char *node,
int nodelen,
45 char *service,
int servicelen,
57 const struct addrinfo *hintp,
struct addrinfo **result)
64 if (hintp->ai_family == AF_UNIX)
69 servname, hintp, result);
87 if (hint_ai_family == AF_UNIX)
92 struct addrinfo *p = ai;
118 char *node,
int nodelen,
119 char *service,
int servicelen,
124 if (addr && addr->ss_family == AF_UNIX)
130 rc = getnameinfo((
const struct sockaddr *) addr, salen,
140 strlcpy(service,
"???", servicelen);
157 struct addrinfo **result)
159 struct addrinfo hints = {0};
160 struct addrinfo *aip;
165 if (strlen(path) >=
sizeof(unp->
sun_path))
170 hints.ai_family = AF_UNIX;
171 hints.ai_socktype = SOCK_STREAM;
174 memcpy(&hints, hintsp,
sizeof(hints));
176 if (hints.ai_socktype == 0)
177 hints.ai_socktype = SOCK_STREAM;
179 if (hints.ai_family != AF_UNIX)
185 aip =
calloc(1,
sizeof(
struct addrinfo));
196 aip->ai_family = AF_UNIX;
197 aip->ai_socktype = hints.ai_socktype;
198 aip->ai_protocol = hints.ai_protocol;
200 aip->ai_canonname = NULL;
204 aip->ai_addr = (
struct sockaddr *) unp;
232 char *node,
int nodelen,
233 char *service,
int servicelen,
239 if (
sa == NULL ||
sa->sun_family != AF_UNIX ||
240 (node == NULL && service == NULL))
245 ret =
snprintf(node, nodelen,
"%s",
"[local]");
246 if (ret < 0 || ret >= nodelen)
256 if (
sa->sun_path[0] ==
'\0' &&
sa->sun_path[1] !=
'\0')
257 ret =
snprintf(service, servicelen,
"@%s",
sa->sun_path + 1);
259 ret =
snprintf(service, servicelen,
"%s",
sa->sun_path);
260 if (ret < 0 || ret >= servicelen)
void pg_freeaddrinfo_all(int hint_ai_family, struct addrinfo *ai)
int pg_getnameinfo_all(const struct sockaddr_storage *addr, int salen, char *node, int nodelen, char *service, int servicelen, int flags)
static int getnameinfo_unix(const struct sockaddr_un *sa, int salen, char *node, int nodelen, char *service, int servicelen, int flags)
static int getaddrinfo_unix(const char *path, const struct addrinfo *hintsp, struct addrinfo **result)
int pg_getaddrinfo_all(const char *hostname, const char *servname, const struct addrinfo *hintp, struct addrinfo **result)
size_t strlcpy(char *dst, const char *src, size_t siz)
unsigned short sun_family