diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2025-06-16 17:09:43 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2025-06-18 15:16:30 +0200 |
commit | 0730e77eb4aa9841e90a17f190b9ae7d80565054 (patch) | |
tree | b214414fb23070fcfcbfc880f78eb7b4cef987c8 /user_server.c |
Initial commitmain
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'user_server.c')
-rw-r--r-- | user_server.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/user_server.c b/user_server.c new file mode 100644 index 0000000..de2054f --- /dev/null +++ b/user_server.c @@ -0,0 +1,52 @@ +#include <arpa/inet.h> +#include <netinet/in.h> +#include <stdio.h> +#include <strings.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <unistd.h> + +#include "common.h" + +static const unsigned char payload_response[] = {PAYLOAD_RESPONSE}; + +int main() { + unsigned char buffer[BUFSIZ]; + int listenfd; + socklen_t len; + struct sockaddr_in servaddr = {}; + struct sockaddr_in cliaddr; + + listenfd = socket(AF_INET, SOCK_DGRAM, 0); + servaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + servaddr.sin_port = htons(UDP_PORT); + servaddr.sin_family = AF_INET; + + if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0) { + perror("udp bind"); + return 1; + } + + size_t i; + ssize_t n; + for (i = 0; i < MAX_UDP_PACKETS; ++i) { + len = sizeof(cliaddr); + n = recvfrom(listenfd, buffer, sizeof(buffer), 0, + (struct sockaddr *)&cliaddr, &len); + if (n < 0) { + perror("udp recvfrom"); + break; + } + + n = sendto(listenfd, payload_response, sizeof(payload_response), 0, + (struct sockaddr *)&cliaddr, sizeof(cliaddr)); + if (n < 0) { + perror("udp sendto"); + break; + } + } + + close(listenfd); + + return !(i == MAX_UDP_PACKETS); +} |