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