Skip to content
Snippets Groups Projects
udp-server.c 1.31 KiB
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>

#define PORT 46123
#define BUF_LENGTH 1024

int
main (void)
{
    int sock = socket (AF_INET, SOCK_DGRAM, 0);
    if (sock == -1)
    {
        perror ("socket");
        exit (EXIT_FAILURE);
    }

    struct sockaddr_in addr;
    memset (&addr, 0, sizeof (struct sockaddr_in));
    addr.sin_family = AF_INET;
    addr.sin_port = htons (PORT);
    addr.sin_addr.s_addr = htonl (INADDR_ANY);

    if (bind (sock, (struct sockaddr *) &addr, sizeof (addr)) == -1)
    {
        perror ("bind");
        close (sock);
        exit (EXIT_FAILURE);
    }

    while (true)
    {
        char buf[BUF_LENGTH];
        struct sockaddr_in src_addr;
        socklen_t addrlen = sizeof (struct sockaddr_in);
        char str[INET_ADDRSTRLEN];

        ssize_t bytes = recvfrom (sock, buf, BUF_LENGTH, 0,
                                  (struct sockaddr *) &src_addr, &addrlen);
        if (inet_ntop (AF_INET, &src_addr.sin_addr, str, INET_ADDRSTRLEN) == NULL)
        {
            fprintf (stderr, "Could not convert address to string\n");
            exit (EXIT_FAILURE);
        }

        printf ("Received %zd bytes from %s\n", bytes, str);
    }
}