Use the eth0 address instead of loopback address in tests.
[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 #define ADDR 0x80BEA8C0
11
12 int main(int argc, const char *argv[])
13 {
14     int sock;
15
16     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
17     if (sock < 0) {
18         perror("Failed to create socket");
19         return -1;
20     }
21
22     int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest);
23     struct sockaddr_swift *saddr = malloc(size);
24     memset(saddr, 0, size);
25
26     saddr->count = 1;
27     saddr->dests[0].addr = ADDR;
28     saddr->dests[0].port = 50;
29
30     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
31         perror("Failed to bind socket");
32         close(sock);
33         return -1;
34     }
35
36     char buf[] = "Buffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de testBuffer de test";
37     char buf2[] = "Buffer2";
38     struct iovec iov[2];
39     struct msghdr msg;
40     int size2 = sizeof(struct sockaddr_swift) + 2 * sizeof(struct swift_dest);
41     struct sockaddr_swift *to = malloc(size2);
42
43     memset(&msg, 0, sizeof(msg));
44     memset(&iov, 0, sizeof(iov));
45     memset(to, 0, size2);
46
47     iov[0].iov_base = buf;
48     iov[0].iov_len = sizeof(buf);
49     iov[1].iov_base = buf2;
50     iov[1].iov_len = sizeof(buf2);
51
52     to->count = 2;
53     to->dests[0].addr = ADDR;
54     to->dests[0].port = 100;
55     to->dests[1].addr = ADDR;
56     to->dests[1].port = 101;
57
58     msg.msg_iov = iov;
59     msg.msg_iovlen = 2;
60     msg.msg_name = to;
61     msg.msg_namelen = size2;
62
63     int ret;
64
65     ret = sendmsg(sock, &msg, sizeof(msg));
66     if (ret < 0) {
67         perror("Failed to send on socket");
68         return -1;
69     }
70
71     printf("Sent %d bytes on socket\n", msg.msg_namelen);
72
73     if (close(sock) < 0) {
74         perror("Failed to close socket");
75         return -1;
76     }
77
78     free(saddr);
79     free(to);
80     return 0;
81 }