b0f1ea8d7475837e20dd352d74222293b68afa45
[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     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
15     if (sock < 0) {
16         perror("Failed to create socket");
17         return -1;
18     }
19
20     int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest);
21     struct sockaddr_swift *saddr = malloc(size);
22     memset(saddr, 0, size);
23
24     saddr->count = 1;
25     saddr->dests[0].addr = 0x0100007F;
26     saddr->dests[0].port = 100;
27
28     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
29         perror("Failed to bind socket");
30         close(sock);
31         return -1;
32     }
33
34     char buf[256];
35     struct iovec iov[1];
36     struct msghdr msg;
37     struct sockaddr_swift *from = malloc(size);
38
39     memset(&msg, 0, sizeof(msg));
40     memset(&iov, 0, sizeof(iov));
41     memset(from, 0, size);
42
43     iov[0].iov_base = buf;
44     iov[0].iov_len = sizeof(buf);
45
46     msg.msg_iov = iov;
47     msg.msg_iovlen = 1;
48     msg.msg_name = from;
49     msg.msg_namelen = size;
50
51     int ret, fromlen;
52
53     ret = recvmsg(sock, &msg, 0);
54     if (ret < 0) {
55         perror("Failed to recv on socket");
56         return -1;
57     }
58
59     printf("Received %d bytes on socket\n", ret);
60     printf("buf=%s\n", buf);
61
62     if (close(sock) < 0) {
63         perror("Failed to close socket");
64         return -1;
65     }
66
67     free(saddr);
68     free(from);
69
70     return 0;
71 }