Add client/server over UDP for testing purposes.
[swifty.git] / test / client_udp.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 #include <time.h>
10
11 #define ADDR 0x8082A8C0
12 #define DADDR 0x8082A8C0
13
14 int gen_port()
15 {
16         int ret;
17         srand(time(NULL));
18         ret = (rand() % 255) + 1;
19         if (ret == 100 || ret == 101)
20                 ret *= 2;
21         printf("Generated source port %d\n", ret);
22         return ret;
23 }
24
25 int main(int argc, const char *argv[])
26 {
27     int sock;
28
29     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
30     if (sock < 0) {
31         perror("Failed to create socket");
32         return -1;
33     }
34
35         struct sockaddr_in saddr;
36     memset(&saddr, 0, sizeof(saddr));
37
38         saddr.sin_addr.s_addr = ADDR;
39         saddr.sin_port = gen_port();
40         saddr.sin_family = AF_INET;
41
42     if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
43         perror("Failed to bind socket");
44         close(sock);
45         return -1;
46     }
47
48     char buf[4096];
49         sprintf(buf, "Buffer");
50     struct iovec iov[1];
51     struct msghdr msg;
52     struct sockaddr_in to;
53
54     memset(&msg, 0, sizeof(msg));
55     memset(&iov, 0, sizeof(iov));
56     memset(&to, 0, sizeof(to));
57
58     iov[0].iov_base = buf;
59     iov[0].iov_len = sizeof(buf);
60
61         to.sin_addr.s_addr = DADDR;
62         to.sin_port = 100;
63         to.sin_family = AF_INET;
64
65     msg.msg_iov = iov;
66     msg.msg_iovlen = 1;
67     msg.msg_name = &to;
68     msg.msg_namelen = sizeof(to);
69
70     int ret;
71
72     ret = sendmsg(sock, &msg, sizeof(msg));
73     if (ret < 0) {
74         perror("Failed to send on socket");
75         return -1;
76     }
77
78     printf("Sent %d bytes on socket\n", msg.msg_namelen);
79
80     if (close(sock) < 0) {
81         perror("Failed to close socket");
82         return -1;
83     }
84
85     return 0;
86 }