#include #include #include #include static int xtables_getportbyname(const char *name) { struct addrinfo *res = NULL, *p; int ret; printf("before\n"); ret = getaddrinfo(NULL, name, NULL, &res); printf("after\n"); if (ret < 0) return -1; ret = -1; for (p = res; p != NULL; p = p->ai_next) { if (p->ai_family == AF_INET6) { ret = ((struct sockaddr_in6 *)p->ai_addr)->sin6_port; break; } else if (p->ai_family == AF_INET) { ret = ((struct sockaddr_in *)p->ai_addr)->sin_port; break; } } freeaddrinfo(res); if (ret < 0) return ret; return ntohs(ret); } int main() { struct servent *service; short port = -1; int port2 = -1; if ((service = getservbyname("bootps", NULL)) != NULL) port = ntohs((unsigned short) service->s_port); printf("getservbyname: %d\n", port); port2 = xtables_getportbyname("bootps"); printf("getaddrinfo: %d\n", port2); return 0; }