mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-09 16:21:45 +00:00
Replace obsolete gethostbyname by getaddrinfo
This also protect against the latest glibc bug
This commit is contained in:
1 parent
6b6637c337
commit
10d0bfdab4
1 file changed
+22
-8
+22
-8
@@ -593,14 +593,28 @@ int ns_socketpair(sock_t sp[2]) {
|
|||||||
|
|
||||||
// TODO(lsm): use non-blocking resolver
|
// TODO(lsm): use non-blocking resolver
|
||||||
static int ns_resolve2(const char *host, struct in_addr *ina) {
|
static int ns_resolve2(const char *host, struct in_addr *ina) {
|
||||||
struct hostent *he;
|
int rv = 0;
|
||||||
if ((he = gethostbyname(host)) == NULL) {
|
struct addrinfo hints, *servinfo, *p;
|
||||||
DBG(("gethostbyname(%s) failed: %s", host, strerror(errno)));
|
struct sockaddr_in *h = NULL;
|
||||||
} else {
|
char *ip = malloc(17);
|
||||||
memcpy(ina, he->h_addr_list[0], sizeof(*ina));
|
memset(ip, '\0', 17);
|
||||||
return 1;
|
|
||||||
}
|
memset(&hints, 0, sizeof hints);
|
||||||
return 0;
|
hints.ai_family = AF_INET;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
|
if((rv = getaddrinfo(host, NULL , NULL, &servinfo)) != 0) {
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(p = servinfo; p != NULL; p = p->ai_next) {
|
||||||
|
memcpy(&h, &p->ai_addr, sizeof(struct sockaddr_in *));
|
||||||
|
memcpy(ina, &h->sin_addr, sizeof(ina));
|
||||||
|
}
|
||||||
|
|
||||||
|
freeaddrinfo(servinfo);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve FDQN "host", store IP address in the "ip".
|
// Resolve FDQN "host", store IP address in the "ip".
|
||||||
|
|||||||
Reference in new issue
Block a user