Merge pull request #2170 from freemine/with-getaddrinfo
replace gethostbyname with getaddrinfo
This commit is contained in:
commit
54e947e369
|
@ -24,43 +24,37 @@ int taosGetFqdn(char *fqdn) {
|
||||||
hostname[1023] = '\0';
|
hostname[1023] = '\0';
|
||||||
gethostname(hostname, 1023);
|
gethostname(hostname, 1023);
|
||||||
|
|
||||||
struct hostent* h;
|
struct addrinfo hints = {0};
|
||||||
h = gethostbyname(hostname);
|
struct addrinfo *result = NULL;
|
||||||
if (h != NULL) {
|
|
||||||
strcpy(fqdn, h->h_name);
|
hints.ai_flags = AI_CANONNAME;
|
||||||
|
|
||||||
|
getaddrinfo(hostname, NULL, &hints, &result);
|
||||||
|
if (result) {
|
||||||
|
strcpy(fqdn, result->ai_canonname);
|
||||||
|
freeaddrinfo(result);
|
||||||
} else {
|
} else {
|
||||||
uError("failed to get host name(%s)", strerror(errno));
|
|
||||||
code = -1;
|
code = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// to do: free the resources
|
|
||||||
// free(h);
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t taosGetIpFromFqdn(const char *fqdn) {
|
uint32_t taosGetIpFromFqdn(const char *fqdn) {
|
||||||
struct addrinfo hints, *servinfo, *p;
|
struct addrinfo hints = {0};
|
||||||
struct sockaddr_in *h;
|
struct addrinfo *result = NULL;
|
||||||
uint32_t ip = -1;
|
|
||||||
|
|
||||||
memset(&hints, 0, sizeof hints);
|
getaddrinfo(fqdn, NULL, &hints, &result);
|
||||||
hints.ai_family = AF_UNSPEC; // use AF_INET6 to force IPv6
|
if (result) {
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
struct sockaddr *sa = result->ai_addr;
|
||||||
|
struct sockaddr_in *si = (struct sockaddr_in*)sa;
|
||||||
if (getaddrinfo(fqdn, "http", &hints, &servinfo) != 0) {
|
struct in_addr ia = si->sin_addr;
|
||||||
uError("failed to get IP from %s(%s)", fqdn, strerror(errno));
|
uint32_t ip = ia.s_addr;
|
||||||
|
freeaddrinfo(result);
|
||||||
|
return ip;
|
||||||
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// to do: loop through all the results and connect to the first we can
|
|
||||||
for(p = servinfo; p != NULL; p = p->ai_next) {
|
|
||||||
h = (struct sockaddr_in *) p->ai_addr;
|
|
||||||
ip = h->sin_addr.s_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
freeaddrinfo(servinfo); // all done with this structure
|
|
||||||
return ip;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function converting an IP address string to an unsigned int.
|
// Function converting an IP address string to an unsigned int.
|
||||||
|
|
Loading…
Reference in New Issue