6cdfa90ae2ed595ec87144d63d410fea54067340
[swifty.git] / test / server_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
10 int main(int argc, const char *argv[])
11 {
12     int sock;
13         int i;
14
15     if (argc != 2) {
16         fprintf(stderr, "USAGE: %s listening_port\n", argv[0]);
17         return -1;
18     }
19
20     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
21     if (sock < 0) {
22         perror("Failed to create socket");
23         return -1;
24     }
25
26     struct sockaddr_in saddr;
27     memset(&saddr, 0, sizeof(saddr));
28
29         inet_pton(AF_INET, "192.168.130.129", &saddr.sin_addr.s_addr);
30         saddr.sin_port = htons(atoi(argv[1]));
31         saddr.sin_family = AF_INET;
32
33     if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
34         perror("Failed to bind socket");
35         close(sock);
36         return -1;
37     }
38
39     char buf[4096];
40     struct iovec iov[1];
41     struct msghdr msg;
42     struct sockaddr_in from;
43
44     memset(&msg, 0, sizeof(msg));
45     memset(&iov, 0, sizeof(iov));
46     memset(&from, 0, sizeof(from));
47
48         iov[0].iov_base = buf;
49         iov[0].iov_len = sizeof(buf);
50
51     msg.msg_iov = iov;
52     msg.msg_iovlen = 1;
53     msg.msg_name = &from;
54     msg.msg_namelen = sizeof(from);
55
56     int ret, fromlen;
57
58 #define N 10000
59
60         for (i = 0; i < N; i ++) {
61                 ret = recvmsg(sock, &msg, 0);
62                 if (ret < 0) {
63                         perror("Failed to recv on socket");
64                         return -1;
65                 }
66                 if (i % (N / 50) == 0)
67                         printf("%d\n", i);
68         }
69
70     printf("Received %d bytes on socket\n", ret);
71         printf("buf=%s\n", buf);
72
73     if (close(sock) < 0) {
74         perror("Failed to close socket");
75         return -1;
76     }
77
78     return 0;
79 }