diff --git a/tests/test_getnameinfo.c b/tests/test_getnameinfo.c new file mode 100644 index 000000000..a238969 --- /dev/null +++ b/tests/test_getnameinfo.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include + +#define satosin(x) ((struct sockaddr_in *) &(x)) +#define SOCKADDR(x) (satosin(x)->sin_addr.s_addr) +#define SOCKADDR_2(x) (satosin(x)->sin_addr) +#define SOCKPORT(x) (satosin(x)->sin_port) +#define SOCKFAMILY(x) (satosin(x)->sin_family) + +int main() { + struct sockaddr a = {0}, *sa = &a; + char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; + SOCKPORT(a) = htons(80); + memcpy( &( (struct sockaddr_in*) sa ) ->sin_addr , (char[]) {127,0,0,1}, 4); + + int ret; + + if ((ret = getnameinfo(sa, 0, hbuf, sizeof(hbuf), sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == EAI_FAMILY); + + if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof(hbuf), sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == EAI_FAMILY); + + SOCKFAMILY(a) = AF_INET; + + if ((ret = getnameinfo(sa, sizeof a, hbuf, 1, sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == EAI_OVERFLOW); + + if ((ret = getnameinfo(sa, sizeof a, hbuf, 0, sbuf, + 1, NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == EAI_OVERFLOW); + + if ((ret = getnameinfo(sa, sizeof a, hbuf, 0, sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == 0); + + if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof hbuf, sbuf, + 0, NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == 0); + + + if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof(hbuf), sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0) + printf("host=%s, serv=%s\n", hbuf, sbuf); + else + printf("%s\n", gai_strerror(ret)); + + assert(ret == 0); + + + return 0; +}