diff options
| author | Nakidai <nakidai@disroot.org> | 2025-06-18 16:39:41 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2025-06-18 16:50:57 +0300 |
| commit | f41dd07dfc4ad4e5b77ebc24986cb3422f44ea5e (patch) | |
| tree | a2770addaa6082b01c136bc603d0319338e1d8ed /cptc.c | |
| parent | 820203c352d2af7318e67640282a69ed41598f93 (diff) | |
| download | cptc-f41dd07dfc4ad4e5b77ebc24986cb3422f44ea5e.tar.gz cptc-f41dd07dfc4ad4e5b77ebc24986cb3422f44ea5e.zip | |
Remove pthreads
I decided that they're not needed there. Instead you can run multiple instances to make them run in parallel. For this flag -w/--id is added
Diffstat (limited to 'cptc.c')
| -rw-r--r-- | cptc.c | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/cptc.c b/cptc.c index 1dafddc..32cdfcc 100644 --- a/cptc.c +++ b/cptc.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include "cptc.h" #include <stdbool.h> @@ -8,7 +9,6 @@ #include <netinet/in.h> #include <arpa/inet.h> -#include <pthread.h> #include <unistd.h> #include <curl/curl.h> @@ -23,30 +23,11 @@ } while (0) \ -struct RequestHandlerArgs -{ - int fd; - int n; - bool accept; -}; - -static void *requestHandlerThread(struct RequestHandlerArgs *arg) -{ - int fd = arg->fd; - int n = arg->n; - arg->accept = true; - CPTC_requestHandler(fd, n); - close(fd); - pthread_exit(NULL); -} - - -void CPTC(const char *ip, in_port_t port) +void CPTC(const char *ip, in_port_t port, unsigned id) { struct sockaddr_in addr, peer; socklen_t peer_size; int fd, peerfd; - int n = 0; curl_easy_init(); @@ -54,6 +35,8 @@ void CPTC(const char *ip, in_port_t port) error("socket()", 1); if ((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int))) < 0) error("setsockopt()", 1); + if ((setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &(int){1}, sizeof(int))) < 0) + error("setsockopt()", 1); addr = (struct sockaddr_in) { @@ -78,10 +61,7 @@ void CPTC(const char *ip, in_port_t port) } printf("Connection from %s:%u!\n", inet_ntoa(peer.sin_addr), peer.sin_port); - pthread_t thread; - struct RequestHandlerArgs arg = {peerfd, n++, false}; - pthread_create(&thread, NULL, (void *(*)(void *))requestHandlerThread, &arg); - pthread_detach(thread); - while (!arg.accept); + CPTC_requestHandler(peerfd, id); + close(peerfd); } } |