The UDP client is now working and it measures the time needed for sending 10k datagrams.
[swifty.git] / test / client_udp.c
1 #include "../src/kernel/swift.h"
2
3 #include <sys/socket.h>
4 #include <sys/types.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <netinet/in.h>
8 #include <stdlib.h>
9 #include <time.h>
10
11 int main(int argc, const char *argv[])
12 {
13     int sock;
14         int i;
15
16     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
17     if (sock < 0) {
18         perror("Failed to create socket");
19         return -1;
20     }
21
22         struct sockaddr_in saddr;
23     memset(&saddr, 0, sizeof(saddr));
24
25         inet_pton(AF_INET, "192.168.130.128", &saddr.sin_addr.s_addr);
26         saddr.sin_port = 0;
27         saddr.sin_family = AF_INET;
28
29     if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
30         perror("Failed to bind socket");
31         close(sock);
32         return -1;
33     }
34
35     char buf[4096];
36         sprintf(buf, "Buffer");
37     struct iovec iov[1];
38     struct msghdr msg;
39     struct sockaddr_in to;
40
41     memset(&msg, 0, sizeof(msg));
42     memset(&iov, 0, sizeof(iov));
43     memset(&to, 0, sizeof(to));
44
45     iov[0].iov_base = buf;
46     iov[0].iov_len = sizeof(buf);
47
48         inet_pton(AF_INET, "192.168.130.129", &to.sin_addr.s_addr);
49         to.sin_port = htons(100);
50         to.sin_family = AF_INET;
51
52     msg.msg_iov = iov;
53     msg.msg_iovlen = 1;
54     msg.msg_name = &to;
55     msg.msg_namelen = sizeof(to);
56
57     int ret;
58
59         struct timeval tv1, tv2;
60         gettimeofday(&tv1, NULL);
61         for (i = 0; i < 10000; i++) {
62                 ret = sendmsg(sock, &msg, 0);
63                 if (ret < 0) {
64                         perror("Failed to send on socket");
65                         return -1;
66                 }
67         }
68         gettimeofday(&tv2, NULL);
69
70         printf("diff=%ld\n", (tv2.tv_sec - tv1.tv_sec) * 1000 + (tv2.tv_usec - tv1.tv_usec) / 1000);
71
72     if (close(sock) < 0) {
73         perror("Failed to close socket");
74         return -1;
75     }
76
77     return 0;
78 }