| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #include "gai_hdr.h"
- #include <sys/utsname.h>
- #ifdef UNIXdomain
- /* include ga_unix */
- int
- ga_unix(const char *path, struct addrinfo *hintsp, struct addrinfo **result)
- {
- int rc;
- struct addrinfo *aihead, **aipnext;
- aihead = NULL;
- aipnext = &aihead;
- if (hintsp->ai_family != AF_UNSPEC && hintsp->ai_family != AF_LOCAL)
- return(EAI_ADDRFAMILY);
- if (hintsp->ai_socktype == 0) {
- /* 4no socket type specified: return stream then dgram */
- hintsp->ai_socktype = SOCK_STREAM;
- if ( (rc = ga_aistruct(&aipnext, hintsp, path, AF_LOCAL)) != 0)
- return(rc);
- hintsp->ai_socktype = SOCK_DGRAM;
- }
- if ( (rc = ga_aistruct(&aipnext, hintsp, path, AF_LOCAL)) != 0)
- return(rc);
- if (hintsp->ai_flags & AI_CANONNAME) {
- struct utsname myname;
- if (uname(&myname) < 0)
- return(EAI_SYSTEM);
- if ( (aihead->ai_canonname = strdup(myname.nodename)) == NULL)
- return(EAI_MEMORY);
- }
- *result = aihead; /* pointer to first structure in linked list */
- return(0);
- }
- /* end ga_unix */
- #endif /* UNIXdomain */
|