A few minor changes to server 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 #define ADDR 0x81BEA8C0
11
12 int main(int argc, const char *argv[])
13 {
14     int sock;
15
16     if (argc != 2) {
17         fprintf(stderr, "USAGE: %s listening_port\n", argv[0]);
18         return -1;
19     }
20
21     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
22     if (sock < 0) {
23         perror("Failed to create socket");
24         return -1;
25     }
26
27     int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest);
28     struct sockaddr_swift *saddr = malloc(size);
29     memset(saddr, 0, size);
30
31     saddr->count = 1;
32     saddr->dests[0].addr = ADDR;
33     saddr->dests[0].port = atoi(argv[1]);
34
35     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
36         perror("Failed to bind socket");
37         close(sock);
38         return -1;
39     }
40
41     char buf[10240];
42     struct iovec iov[1];
43     struct msghdr msg;
44     struct sockaddr_swift *from = malloc(size);
45
46     memset(&msg, 0, sizeof(msg));
47     memset(&iov, 0, sizeof(iov));
48     memset(from, 0, size);
49
50     iov[0].iov_base = buf;
51     iov[0].iov_len = sizeof(buf);
52
53     msg.msg_iov = iov;
54     msg.msg_iovlen = 1;
55     msg.msg_name = from;
56     msg.msg_namelen = size;
57
58     int ret, fromlen;
59
60     ret = recvmsg(sock, &msg, 0);
61     if (ret < 0) {
62         perror("Failed to recv on socket");
63         return -1;
64     }
65
66     printf("Received %d bytes on socket\n", ret);
67     printf("buf=%s\n", buf);
68
69     if (close(sock) < 0) {
70         perror("Failed to close socket");
71         return -1;
72     }
73
74     free(saddr);
75     free(from);
76
77     return 0;
78 }