Fix various compile warnings
[splice.git] / splice-test4s.c
1 #include <errno.h>
2 #include <fcntl.h>
3 #include <netinet/in.h>
4 #include <signal.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <sys/sendfile.h>
8 #include <sys/socket.h>
9 #include <sys/time.h>
10 #include <sys/types.h>
11 #include <unistd.h>
12
13 static int error(const char *n)
14 {
15         perror(n);
16         return -1;
17 }
18
19 static int parent(int listen_sk)
20 {
21         unsigned long received;
22         struct sockaddr addr;
23         unsigned int len = sizeof(addr);
24         int sk;
25
26 again:
27         sk = accept(listen_sk, &addr, &len);
28         if (sk < 0)
29                 return error("accept");
30
31         /* read forever */
32         received = 0;
33         for (;;) {
34                 int ret = recv(sk, NULL, 128*1024*1024, MSG_TRUNC);
35                 if (ret > 0) {
36                         received += ret;
37                         continue;
38                 }
39                 if (!ret)
40                         break;
41                 if (errno == EAGAIN || errno == EINTR)
42                         continue;
43                 break;
44         }
45
46         printf("Received %f MB of data\n", (double) received / (1024*1024));
47         close(sk);
48         goto again;
49 }
50
51 int main(__attribute__((__unused__)) int argc, __attribute__((__unused__)) char **argv)
52 {
53         struct sockaddr_in saddr_in;
54         struct sockaddr addr;
55         unsigned int len;
56         int sk;
57
58         signal(SIGCHLD, SIG_IGN);
59         sk = socket(PF_INET, SOCK_STREAM, 0);
60         if (sk < 0) {
61                 perror("socket");
62                 exit(1);
63         }
64         saddr_in.sin_addr.s_addr = htonl(INADDR_ANY);
65         saddr_in.sin_port = htons(1111);
66
67         if (bind(sk, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) < 0) {
68                 fprintf(stderr,"bind failed\n");
69                 exit(1);
70         }
71
72         if (listen(sk, 1) < 0) {
73                 perror("listen");
74                 exit(1);
75         }
76         len = sizeof(addr);
77         if (getsockname(sk, &addr, &len) < 0) {
78                 perror("getsockname");
79                 exit(1);
80         }
81         return parent(sk);
82 }