diff options
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/server.c b/server.c new file mode 100644 index 0000000..e35a9b5 --- /dev/null +++ b/server.c @@ -0,0 +1,36 @@ +// Initially based on https://stackoverflow.com/a/35570418 + +#include <netinet/in.h> +#include <stdio.h> +#include <string.h> +#include <sys/socket.h> +#include <unistd.h> + +int main(void) +{ + int const fd = socket(AF_INET, SOCK_DGRAM, 0); + if (fd < 0) { + perror("socket failed"); + return 1; + } + struct sockaddr_in const serveraddr = { + .sin_family = AF_INET, + .sin_port = htons(50037), + .sin_addr.s_addr = htonl(INADDR_ANY), + }; + if (bind(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) { + perror("bind failed"); + return 1; + } + for (;;) { + char buffer[200]; + int const length = recvfrom(fd, buffer, sizeof(buffer) - 1, 0, NULL, 0); + if (length < 0) { + perror("recvfrom failed"); + break; + } + buffer[length] = '\0'; + printf("%d bytes: '%s'\n", length, buffer); + } + close(fd); +} |