1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/*
* Copyright 2013 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#include <arpa/inet.h>
#include <sys/socket.h>
#include <assert.h>
#include <errno.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
int main() {
char str[INET_ADDRSTRLEN];
struct hostent *host = NULL;
struct hostent hostData;
struct in_addr addr;
const char *res;
char buffer[2048];
int err;
// gethostbyname_r calls the same stuff as gethostbyname, so we'll test the
// more complicated one.
// resolve the hostname to an actual address
gethostbyname_r("slashdot.org", &hostData, buffer, sizeof(buffer), &host, &err);
assert(host->h_addrtype == AF_INET);
assert(host->h_length == sizeof(uint32_t));
// convert the raw address to a string
char **raw_addr_list = host->h_addr_list;
int *raw_addr = (int*)*raw_addr_list;
res = inet_ntop(host->h_addrtype, raw_addr, str, INET_ADDRSTRLEN);
assert(res);
// convert the string to an in_addr structure
err = inet_pton(AF_INET, str, &addr);
assert(err == 1);
// do a reverse lookup on the ip address
struct hostent *host1 = gethostbyaddr(&addr, sizeof(addr), host->h_addrtype);
assert(strstr(host1->h_name, "slashdot.org"));
puts("success");
return EXIT_SUCCESS;
}
|