staticint getnameinfo_unix(conststruct sockaddr_un *sa, int salen, char *node, int nodelen, char *service, int servicelen, int flags);
/* *pg_getaddrinfo_all-getaddressinfoforUnix,IPv4andIPv6sockets
*/ int
pg_getaddrinfo_all(constchar *hostname, constchar *servname, conststruct addrinfo *hintp, struct addrinfo **result)
{ int rc;
/* not all versions of getaddrinfo() zero *result on failure */
*result = NULL;
if (hintp->ai_family == AF_UNIX) return getaddrinfo_unix(servname, hintp, result);
/* NULL has special meaning to getaddrinfo(). */
rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
servname, hintp, result);
return rc;
}
/* *pg_freeaddrinfo_all-freeaddrinfostructuresforIPv4,IPv6,orUnix * *Note:theai_familyfieldoftheoriginalhintstructuremustbepassed *sothatwecantellwhethertheaddrinfostructwasbuiltbythesystem's *getaddrinfo()routineorourowngetaddrinfo_unix()routine.Someversions *ofgetaddrinfo()mightbewillingtoreturnAF_UNIXaddresses,soit's *notsafetolookatai_familyintheaddrinfoitself.
*/ void
pg_freeaddrinfo_all(int hint_ai_family, struct addrinfo *ai)
{ if (hint_ai_family == AF_UNIX)
{ /* struct was built by getaddrinfo_unix (see pg_getaddrinfo_all) */ while (ai != NULL)
{ struct addrinfo *p = ai;
ai = ai->ai_next;
free(p->ai_addr);
free(p);
}
} else
{ /* struct was built by getaddrinfo() */ if (ai != NULL)
freeaddrinfo(ai);
}
}
/* *pg_getnameinfo_all-getnameinfoforUnix,IPv4andIPv6sockets * *TheAPIofthisroutinediffersfromthestandardgetnameinfo()definition *intwoways:first,theaddrparameterisdeclaredassockaddr_storage *ratherthanstructsockaddr,andsecond,thenodeandservicefieldsare *guaranteedtobefilledwithsomethingevenonfailurereturn.
*/ int
pg_getnameinfo_all(conststruct sockaddr_storage *addr, int salen, char *node, int nodelen, char *service, int servicelen, int flags)
{ int rc;
/* *Convertanaddresstoahostname.
*/ staticint
getnameinfo_unix(conststruct sockaddr_un *sa, int salen, char *node, int nodelen, char *service, int servicelen, int flags)
{ int ret;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.