14// Note: this is not consistent across CPUs (and hence across threads on multicore machines)
17 gettimeofday(&tp, NULL);
18 return ((double) tp.tv_sec) * 1e6 + (double) tp.tv_usec;
22 printf("starting server\n");
24 struct addrinfo hints, *res;
25 int error, server_socket;
27 memset(&hints, 0, sizeof(hints));
28 hints.ai_family = PF_INET;
29 hints.ai_socktype = SOCK_STREAM;
30 hints.ai_flags = AI_PASSIVE;
32 error = getaddrinfo(NULL, "8080", &hints, &res);
34 printf("server error: %s\n", gai_strerror(error));
38 server_socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
39 if(server_socket < 0) {
40 printf("server error: could not create socket\n");
45 if(setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) < 0) {
46 printf("server error: could not set socket options\n");
50 if(bind(server_socket, res->ai_addr, res->ai_addrlen) < 0) {
51 printf("server error: could not bind to socket\n");
55 listen(server_socket, 5);
58 struct sockaddr_storage client_addr;
60 client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_size);
63 char* buf = malloc(8);
64 ssize_t read = recv(client_socket, buf, 8, 0);
69 // printf("server received '%s'\n", buf);
70 send(client_socket, buf, 8, 0);
78int client(int pings) {
79 printf("starting client\n");
81 struct addrinfo hints, *res;
82 int error, client_socket;
84 memset(&hints, 0, sizeof(hints));
85 hints.ai_family = PF_INET;
86 hints.ai_socktype = SOCK_STREAM;
88 error = getaddrinfo("127.0.0.1", "8080", &hints, &res);
90 printf("client error: %s\n", gai_strerror(error));
94 client_socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
95 if(client_socket < 0) {
96 printf("client error: could not create socket\n");
100 if(connect(client_socket, res->ai_addr, res->ai_addrlen) < 0) {
101 printf("client error: could not connect: %s\n", strerror(errno));
105 for(int i = 0; i < pings; i++) {
106 double timestamp_before = timestamp();
108 send(client_socket, "ping123", 8, 0);
110 char *buf = malloc(8);
111 ssize_t read = recv(client_socket, buf, 8, 0);
114 printf("server exited prematurely\n");
119 // printf("client received '%s'\n", buf);
122 double timestamp_after = timestamp();
123 fprintf(stderr, "%i %lf\n", i, timestamp_after - timestamp_before);
126 printf("client did %d pings\n", pings);
132int usage(int argc, char** argv) {
133 printf("usage: %s <number of pings>\n", argv[0]);
137int main(int argc, char** argv) {
139 return usage(argc, argv);
143 // TODO: we should wait until we know the server is ready
145 sscanf(argv[1], "%d", &pings);
146 return client(pings);
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list