From a2fa006f2b20d0c1617eb29c87f3df3acbf94987 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Wed, 25 Sep 2024 00:48:29 +0300 Subject: Add code --- cptc.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 cptc.c (limited to 'cptc.c') diff --git a/cptc.c b/cptc.c new file mode 100644 index 0000000..60c1954 --- /dev/null +++ b/cptc.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +#include "cptc.h" + + +#define error(text, status) \ + do \ + { \ + perror(text); \ + exit(status); \ + } while (0) \ + + +void CPTC(const char *ip, in_port_t port) +{ + struct sockaddr_in addr, peer; + socklen_t peer_size; + int fd, peerfd; + + if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + error("socket()", 1); + + addr = (struct sockaddr_in) + { + .sin_addr.s_addr = inet_addr(ip), + .sin_port = htons(port), + .sin_family = AF_INET, + }; + + if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) + error("bind()", 1); + if (listen(fd, 128) == -1) + error("listen()", 3); + + printf("Started serving at %s:%d\n", ip, port); + for (;;) + { + peer_size = sizeof(peer); + if ((peerfd = accept(fd, (struct sockaddr *)&peer, &peer_size)) < 0) + { + perror("accept()"); + continue; + } + printf("Connection from %s:%u!\n", inet_ntoa(peer.sin_addr), peer.sin_port); + + CPTC_requestHandler(peerfd); + close(peerfd); + } +} -- cgit 1.4.1