+ for (uint32_t x= 0; x < server_count; x++)
+ {
+ memcached_server_instance_st instance=
+ memcached_server_instance_by_position(memc, x);
+
+ if ((servers[x]= memcached_create(NULL)) == NULL)
+ {
+ fprintf(stderr, "Failed to memcached_create()\n");
+ if (x > 0)
+ memcached_free(servers[0]);
+ x--;
+ for (; x > 0; x--)
+ memcached_free(servers[x]);
+
+ free(servers);
+ return;
+ }
+ memcached_server_add(servers[x],
+ memcached_server_name(instance),
+ memcached_server_port(instance));
+ }
+
+ printf("Network Latency Test:\n\n");
+ struct timeval start_time, end_time;
+ uint32_t slowest_server= 0;
+ long elapsed_time, slowest_time= 0;
+
+ for (uint32_t x= 0; x < server_count; x++)
+ {
+ memcached_server_instance_st instance=
+ memcached_server_instance_by_position(memc, x);
+ gettimeofday(&start_time, NULL);
+
+ for (uint32_t y= 0; y < num_of_tests; y++)
+ {
+ size_t vlen;
+ char *val= memcached_get(servers[x], test_key, strlen(test_key),
+ &vlen, &flags, &rc);
+ if (rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_SUCCESS)
+ break;
+ free(val);
+ }
+ gettimeofday(&end_time, NULL);
+
+ elapsed_time= (long) timedif(end_time, start_time);
+ elapsed_time /= (long) num_of_tests;
+
+ if (elapsed_time > slowest_time)
+ {
+ slowest_server= x;
+ slowest_time= elapsed_time;
+ }
+
+ if (rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_SUCCESS)
+ {
+ printf("\t %s (%d) => failed to reach the server\n",
+ memcached_server_name(instance),
+ memcached_server_port(instance));
+ }
+ else
+ {
+ printf("\t %s (%d) => %ld.%ld seconds\n",
+ memcached_server_name(instance),
+ memcached_server_port(instance),
+ elapsed_time / 1000, elapsed_time % 1000);
+ }
+ }
+
+ if (server_count > 1 && slowest_time > 0)
+ {
+ memcached_server_instance_st slowest=
+ memcached_server_instance_by_position(memc, slowest_server);
+
+ printf("---\n");
+ printf("Slowest Server: %s (%d) => %ld.%ld seconds\n",
+ memcached_server_name(slowest),
+ memcached_server_port(slowest),
+ slowest_time / 1000, slowest_time % 1000);
+ }