dd8bebfecf29a25fa5cadce6927c79349a317770
[swifty.git] / test / client.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 = 50;
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[] = "Buffer de test";
35     char buf2[] = "Buffer2";
36     struct iovec iov[2];
37     struct msghdr msg;
38     int size2 = sizeof(struct sockaddr_swift) + 2 * sizeof(struct swift_dest);
39     struct sockaddr_swift *to = malloc(size2);
40
41     memset(&msg, 0, sizeof(msg));
42     memset(&iov, 0, sizeof(iov));
43     memset(to, 0, size2);
44
45     iov[0].iov_base = buf;
46     iov[0].iov_len = sizeof(buf);
47     iov[1].iov_base = buf2;
48     iov[1].iov_len = sizeof(buf2);
49
50     to->count = 2;
51     to->dests[0].addr = 0x0100007F;
52     to->dests[0].port = 100;
53     to->dests[1].addr = 0x0100007F;
54     to->dests[1].port = 101;
55
56     msg.msg_iov = iov;
57     msg.msg_iovlen = 2;
58     msg.msg_name = to;
59     msg.msg_namelen = size2;
60
61     int ret;
62
63     ret = sendmsg(sock, &msg, sizeof(msg));
64     if (ret < 0) {
65         perror("Failed to send on socket");
66         return -1;
67     }
68
69     printf("Sent %d bytes on socket\n", msg.msg_namelen);
70
71     if (close(sock) < 0) {
72         perror("Failed to close socket");
73         return -1;
74     }
75
76     free(saddr);
77     free(to);
78     return 0;
79 }