#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>

int main(void)
{
	struct addrinfo *ai, *aip, hint = {0};
	int err;
	char hostn[256], portn[10];

	hint.ai_family = AF_UNSPEC;
	hint.ai_socktype = SOCK_STREAM;
	hint.ai_protocol = IPPROTO_TCP;
	hint.ai_flags = AI_PASSIVE;

	err = getaddrinfo(NULL, "22", &hint, &ai);
	if (err || !ai) return 1;

	for (aip = ai; aip; aip = aip->ai_next) {
		err = getnameinfo(aip->ai_addr, aip->ai_addrlen, hostn, sizeof(hostn), portn, sizeof(portn), NI_NUMERICHOST|NI_NUMERICSERV);
		if (err) { printf("%p: invalid\n", aip); continue; }
		printf("%p: %s:%s\n", aip, hostn, portn);
	}

	freeaddrinfo(ai);

	return 0;
}
