Implement one to manny transmission. Also modify the test files.
[swifty.git] / test / server.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
14     if (argc != 2) {
15         fprintf(stderr, "USAGE: %s listening_port\n", argv[0]);
16         return -1;
17     }
18
19     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
20     if (sock < 0) {
21         perror("Failed to create socket");
22         return -1;
23     }
24
25     int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest);
26     struct sockaddr_swift *saddr = malloc(size);
27     memset(saddr, 0, size);
28
29     saddr->count = 1;
30     saddr->dests[0].addr = 0x0100007F;
31     saddr->dests[0].port = atoi(argv[1]);
32
33     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
34         perror("Failed to bind socket");
35         close(sock);
36         return -1;
37     }
38
39     char buf[256];
40     struct iovec iov[1];
41     struct msghdr msg;
42     struct sockaddr_swift *from = malloc(size);
43
44     memset(&msg, 0, sizeof(msg));
45     memset(&iov, 0, sizeof(iov));
46     memset(from, 0, size);
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 = size;
55
56     int ret, fromlen;
57
58     ret = recvmsg(sock, &msg, 0);
59     if (ret < 0) {
60         perror("Failed to recv on socket");
61         return -1;
62     }
63
64     printf("Received %d bytes on socket\n", ret);
65     printf("buf=%s\n", buf);
66
67     if (close(sock) < 0) {
68         perror("Failed to close socket");
69         return -1;
70     }
71
72     free(saddr);
73     free(from);
74
75     return 0;
76 }