blob: c0e11efbe79d5ce649eabf7d79f80d6de477af20 [file] [log] [blame]
#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;
}