#include #include #include #include #include #include #include #include #define NUM_LOOKUPS 30 #define MAX_RATE 10 #define DOMAIN "xuchen.com" int main() { const char *hostname = DOMAIN; struct addrinfo hints; int err; struct timespec start_time; struct timespec end_time; double latency, total; int i, success; /* memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = 0; */ fprintf(stderr, "Running benchmark\n"); success = 0; for (i = 0; i < NUM_LOOKUPS; i++) { struct addrinfo *res; clock_gettime(CLOCK_REALTIME, &start_time); err = getaddrinfo (hostname, NULL, NULL, &res); if (err) { fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(err)); } else { clock_gettime(CLOCK_REALTIME, &end_time); latency = (double)end_time.tv_sec + (double)end_time.tv_nsec / 1e9; latency -= (double)start_time.tv_sec + (double)start_time.tv_nsec / 1e9; total += latency; success++; } freeaddrinfo(res); usleep(1e6/MAX_RATE); } double avg = total / (double)success * 1000.0; printf("getaddrinfo: %d/%d successful lookups\n", success, NUM_LOOKUPS); printf("getaddrinfo: %lfms average per lookup\n", avg); return 0; }