From 01b7138f5ac670331663dc428c738d042a42b71f Mon Sep 17 00:00:00 2001 From: Adrian Bondrescu Date: Thu, 31 May 2012 23:50:56 +0300 Subject: [PATCH] Add client/server over UDP for testing purposes. --- test/Makefile | 10 +++++- test/client_udp.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++ test/server_udp.c | 76 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 test/client_udp.c create mode 100644 test/server_udp.c diff --git a/test/Makefile b/test/Makefile index e5848cd..3d26703 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,12 +1,16 @@ CC=gcc CFLAGS=-g -build: client server client_lf server_lf +build: client server client_udp server_udp client_lf server_lf client: client.o server: server.o +client_udp: client_udp.o + +server_udp: server_udp.o + client_lf: client_lf.o server_lf: server_lf.o @@ -15,6 +19,10 @@ client.o: client.c server.o: server.c +client_udp.o: client_udp.c + +server_udp.o: server_udp.c + client_lf.o: client_lf.c server_lf.o: server_lf.c diff --git a/test/client_udp.c b/test/client_udp.c new file mode 100644 index 0000000..71a5f22 --- /dev/null +++ b/test/client_udp.c @@ -0,0 +1,86 @@ +#include "../src/kernel/swift.h" + +#include +#include +#include +#include +#include +#include +#include + +#define ADDR 0x8082A8C0 +#define DADDR 0x8082A8C0 + +int gen_port() +{ + int ret; + srand(time(NULL)); + ret = (rand() % 255) + 1; + if (ret == 100 || ret == 101) + ret *= 2; + printf("Generated source port %d\n", ret); + return ret; +} + +int main(int argc, const char *argv[]) +{ + int sock; + + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock < 0) { + perror("Failed to create socket"); + return -1; + } + + struct sockaddr_in saddr; + memset(&saddr, 0, sizeof(saddr)); + + saddr.sin_addr.s_addr = ADDR; + saddr.sin_port = gen_port(); + saddr.sin_family = AF_INET; + + if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) { + perror("Failed to bind socket"); + close(sock); + return -1; + } + + char buf[4096]; + sprintf(buf, "Buffer"); + struct iovec iov[1]; + struct msghdr msg; + struct sockaddr_in to; + + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + memset(&to, 0, sizeof(to)); + + iov[0].iov_base = buf; + iov[0].iov_len = sizeof(buf); + + to.sin_addr.s_addr = DADDR; + to.sin_port = 100; + to.sin_family = AF_INET; + + msg.msg_iov = iov; + msg.msg_iovlen = 1; + msg.msg_name = &to; + msg.msg_namelen = sizeof(to); + + int ret; + + ret = sendmsg(sock, &msg, sizeof(msg)); + if (ret < 0) { + perror("Failed to send on socket"); + return -1; + } + + printf("Sent %d bytes on socket\n", msg.msg_namelen); + + if (close(sock) < 0) { + perror("Failed to close socket"); + return -1; + } + + return 0; +} diff --git a/test/server_udp.c b/test/server_udp.c new file mode 100644 index 0000000..970272c --- /dev/null +++ b/test/server_udp.c @@ -0,0 +1,76 @@ +#include "../src/kernel/swift.h" + +#include +#include +#include +#include +#include +#include + +#define ADDR 0x8182A8C0 +#define NUM_BUF 10 + +int main(int argc, const char *argv[]) +{ + int sock; + int i; + + if (argc != 2) { + fprintf(stderr, "USAGE: %s listening_port\n", argv[0]); + return -1; + } + + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock < 0) { + perror("Failed to create socket"); + return -1; + } + + struct sockaddr_in saddr; + memset(&saddr, 0, sizeof(saddr)); + + saddr.sin_addr.s_addr = ADDR; + saddr.sin_port = htons(atoi(argv[1])); + saddr.sin_family = AF_INET; + + if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) { + perror("Failed to bind socket"); + close(sock); + return -1; + } + + char buf[4096]; + struct iovec iov[1]; + struct msghdr msg; + struct sockaddr_in from; + + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + memset(&from, 0, sizeof(from)); + + iov[0].iov_base = buf; + iov[0].iov_len = sizeof(buf); + + msg.msg_iov = iov; + msg.msg_iovlen = 1; + msg.msg_name = &from; + msg.msg_namelen = sizeof(from); + + int ret, fromlen; + + ret = recvmsg(sock, &msg, 0); + if (ret < 0) { + perror("Failed to recv on socket"); + return -1; + } + + printf("Received %d bytes on socket\n", ret); + printf("buf=%s\n", buf); + + if (close(sock) < 0) { + perror("Failed to close socket"); + return -1; + } + + return 0; +} -- 2.20.1