struct hostent *ei_gethostbyaddr_r(const char *addr, int length, int type, struct hostent *hostp, char *buffer, int buflen, int *h_errnop) { struct hostent *h = NULL; /* use own func if sens function not available */ if (!sens_gethostbyaddr) { h = my_gethostbyaddr_r(addr,length,type,hostp,buffer,buflen,h_errnop); } else { if (!(h = sens_gethostbyaddr(addr,buffer,buflen))) { /* sens returns status via errno */ *h_errnop = errno; } else { *hostp = *h; *h_errnop = 0; } } return h; }
struct hostent *ei_gethostbyaddr_r(const char *addr, int length, int type, struct hostent *hostp, char *buffer, int buflen, int *h_errnop) { #if (EI_THREADS == false) /* threads disabled, no need to call reentrant function */ return gethostbyaddr(addr, length, type); #else #ifndef HAVE_GETHOSTBYNAME_R return my_gethostbyaddr_r(addr,length,type,hostp,buffer,buflen,h_errnop); #else #if (defined(__GLIBC__) || (__FreeBSD_version >= 602000) || defined(__DragonFly__)) struct hostent *result; gethostbyaddr_r(addr, length, type, hostp, buffer, buflen, &result, h_errnop); return result; #else return gethostbyaddr_r(addr,length,type,hostp,buffer,buflen,h_errnop); #endif #endif #endif }
int sockinetaddr::gethostname (char *hostname, size_t hostnameLen) const { hostname[0] = '\0'; if (sin_addr.s_addr == htonl(INADDR_ANY)) { if (::gethostname(hostname, hostnameLen) == -1) { SOCK_ERROR("sockinetaddr", "gethostname"); hostname[0] = '\0'; return -1; } return 0; } int hostErrno; struct hostent hostResult; char hostBuffer[4096]; hostent* hp; if ((my_gethostbyaddr_r((const char*) &sin_addr, sizeof(sin_addr), family(), &hostResult, hostBuffer, 2048, &hp, &hostErrno) != 0) || (hp == 0)) { sockinetaddr::herror("gethostbyaddr"); return -1; } if ((hp->h_name) && (strlen(hp->h_name) < hostnameLen)) { strcpy (hostname, hp->h_name); return 0; } return -1; }