From: Egor Date: Mon, 17 Mar 2025 18:39:05 +0000 (+0200) Subject: netpoll: move into namespace X-Git-Url: https://git.patchysicp.xyz/?a=commitdiff_plain;h=f77f4e548c9572df5743f8acbf0fe8ea2be43f2a;p=patchyircd.git netpoll: move into namespace --- diff --git a/src/main.cpp b/src/main.cpp index 0f1dd15..8ef6a35 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -150,7 +150,7 @@ static void accept_from_sock(struct listener *listener) } if (!cl->hostname) abort(); - net_poll_add(cl->FD, SOCKTYPE_CLIENT, cl); + netpoll::add(cl->FD, SOCKTYPE_CLIENT, cl); update_poll_reg(cl); copy_strf(&databuf, ":%s NOTICE * :Hello welcome to PatchyIRCD!\r\n", hostname); sendbuf(cl); @@ -168,7 +168,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "[PatchyIRCD]: Starting up...\n"); net_init(); - net_poll_init(); + netpoll::init(); job_init(); #ifdef HAS_LUA admin_init(); @@ -233,8 +233,8 @@ int main(int argc, char *argv[]) for (int i = 0; i < listener_count; i++) { net_nonblock(listeners[i].sock); - net_poll_add(listeners[i].sock, SOCKTYPE_LISTENER, &listeners[i]); - net_poll_reg(listeners[i].sock, NETPOLL_IN); + netpoll::add(listeners[i].sock, SOCKTYPE_LISTENER, &listeners[i]); + netpoll::reg(listeners[i].sock, NETPOLL_IN); } FILE *f = fopen(getdatafile("init.txt"), "rb" FOPEN_CLOEXEC); @@ -300,7 +300,7 @@ int main(int argc, char *argv[]) if (is_siginted) { fprintf(stderr, "[PatchyIRCD]: Cleaning up...\n"); for (int i = 0; i < listener_count; i++) { - net_poll_del_and_close(listeners[i].sock); + netpoll::del_and_close(listeners[i].sock); } listener_count = 0; for (struct client_data *cl = clients; cl;) { @@ -315,7 +315,7 @@ int main(int argc, char *argv[]) } job_process_begin(); - if (net_poll_begin() == -1) { + if (netpoll::begin() == -1) { if (errno == EINTR) { job_process_end(); continue; @@ -325,8 +325,8 @@ int main(int argc, char *argv[]) } job_process_end(); int ev; - struct net_pollfd pfd; - while ((ev = net_poll_get(&pfd))) { + netpoll::net_pollfd pfd; + while ((ev = netpoll::get(&pfd))) { switch (pfd.type) { case SOCKTYPE_LISTENER: if (ev & NETPOLL_IN) @@ -374,7 +374,7 @@ int main(int argc, char *argv[]) admin_fini(); #endif job_fini(); - net_poll_fini(); + netpoll::fini(); net_cleanup(); #ifdef HAS_TLS tls_free(tls_ctx); diff --git a/src/net.cpp b/src/net.cpp index b8b2fa9..e2246dd 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -29,7 +29,7 @@ void update_poll_reg(struct client_data *cl) nreg |= NETPOLL_OUT; } if (nreg != cl->poll_reg) { - net_poll_reg(cl->FD, nreg); + netpoll::reg(cl->FD, nreg); cl->poll_reg = nreg; } } @@ -61,7 +61,7 @@ void killConnection(struct client_data *cl, int byChoice) cl->next = dyingclients; dyingclients = cl; if (cl->FD != INVALID_SOCKET) - net_poll_change_type(cl->FD, SOCKTYPE_DYING); + netpoll::change_type(cl->FD, SOCKTYPE_DYING); update_poll_reg(cl); /* Part all channels */ for (auto chan : cl->channels.pop_view()) @@ -112,7 +112,7 @@ void killConnectionPart2(struct client_data *cl) } #endif shutdown(cl->FD, SHUT_RDWR); - net_poll_del_and_close(cl->FD); + netpoll::del_and_close(cl->FD); } /* Remove the client from the dyingclients chain */ for (struct client_data **next = &dyingclients; *next; next = &(*next)->next) { diff --git a/src/netpoll.cpp b/src/netpoll.cpp index 23f323c..870256d 100644 --- a/src/netpoll.cpp +++ b/src/netpoll.cpp @@ -1,5 +1,6 @@ #include "netpoll.h" +namespace netpoll { #define NETPOLL_MAXFDS 1024 static struct net_pollfd fds[NETPOLL_MAXFDS] = {}; static int nfds = 0; @@ -7,13 +8,13 @@ static int nfds = 0; #if defined(NETPOLL_USE_POLL) static struct pollfd pollfds[NETPOLL_MAXFDS] = {}; static int lastptr = 0; -void net_poll_init(void) +void init(void) { } -void net_poll_fini(void) +void fini(void) { } -static void net_poll_add_impl(int i) +static void add_impl(int i) { memmove(pollfds+i+1, pollfds+i, sizeof(pollfds[0])*(nfds-1-i)); pollfds[i].fd = fds[i].fd; @@ -22,13 +23,13 @@ static void net_poll_add_impl(int i) if (lastptr >= i) lastptr++; } -static void net_poll_del_impl(int i) +static void del_impl(int i) { memmove(pollfds+i, pollfds+i+1, sizeof(pollfds[0])*(nfds-(i+1))); if (lastptr > i) lastptr--; } -static void net_poll_reg_impl(int i, int ev) +static void reg_impl(int i, int ev) { pollfds[i].events = 0; if (ev & NETPOLL_IN) @@ -36,7 +37,7 @@ static void net_poll_reg_impl(int i, int ev) if (ev & NETPOLL_OUT) pollfds[i].events = POLLOUT; } -int net_poll_begin(void) +int begin(void) { sigset_t mask; sigprocmask(0, 0, &mask); @@ -45,7 +46,7 @@ int net_poll_begin(void) lastptr = 0; return rv; } -int net_poll_get(struct net_pollfd *out) +int get(struct net_pollfd *out) { int ev = 0; while (!ev) { @@ -92,12 +93,12 @@ namespace uvalloc { put(&uvpollbuf[i]); } } -void net_poll_init(void) +void init(void) { uvalloc::init(); uvloop = uv_default_loop(); } -void net_poll_fini(void) +void fini(void) { // get rid of closing handles uv_run(uv_default_loop(), UV_RUN_NOWAIT); @@ -105,7 +106,7 @@ void net_poll_fini(void) uv_print_all_handles(uvloop, stderr); uv_library_shutdown(); } -static void net_poll_add_impl(int i) +static void add_impl(int i) { struct polldata *poll = uvalloc::get(); memmove(uvpoll+i+1, uvpoll+i, sizeof(uvpoll[0])*(nfds-1-i)); @@ -117,7 +118,7 @@ static void net_poll_add_impl(int i) if (lastptr >= i) lastptr++; } -static void net_poll_del_impl(int i) +static void del_impl(int i) { struct polldata *poll = uvpoll[i]; memmove(uvpoll+i, uvpoll+i+1, sizeof(uvpoll[0])*(nfds-(i+1))); @@ -129,7 +130,7 @@ static void net_poll_del_impl(int i) if (lastptr > i) lastptr--; } -static void net_poll_cb(uv_poll_t *handle, int status, int events) +static void cb(uv_poll_t *handle, int status, int events) { struct polldata *poll = container_of(handle, struct polldata, uv); if (status == 0) { @@ -137,12 +138,12 @@ static void net_poll_cb(uv_poll_t *handle, int status, int events) } uv_poll_stop(handle); if (status == -EBADF) { - fprintf(stderr, "net_poll_cb: %d EBADF!\n", poll->fd); - net_poll_del_and_close(poll->fd); + fprintf(stderr, "netpoll::cb: %d EBADF!\n", poll->fd); + del_and_close(poll->fd); } lastptr = 0; } -static void net_poll_reg_impl(int i, int ev) +static void reg_impl(int i, int ev) { int events = 0; if (ev & NETPOLL_IN) @@ -151,16 +152,16 @@ static void net_poll_reg_impl(int i, int ev) events |= UV_WRITABLE; uvpoll[i]->events = events; } -int net_poll_begin(void) +int begin(void) { for (int i = 0; i < nfds; i++) { - uv_poll_start(&uvpoll[i]->uv, uvpoll[i]->events, net_poll_cb); + uv_poll_start(&uvpoll[i]->uv, uvpoll[i]->events, cb); uvpoll[i]->revents = 0; } uv_run(uvloop, UV_RUN_ONCE); return 0; } -int net_poll_get(struct net_pollfd *out) +int get(struct net_pollfd *out) { int ev = 0; while (!ev) { @@ -195,68 +196,69 @@ static int search(SOCKET fd) { } #define IS_FOUND(i, f) ((i) < nfds && fds[i].fd == (f)) -void net_poll_add(SOCKET fd, int type, void *assoc) +void add(SOCKET fd, int type, void *assoc) { if (fd == INVALID_SOCKET) { - fprintf(stderr, "net_poll_add: INVALID_SOCKET\n"); + fprintf(stderr, "netpoll::add: INVALID_SOCKET\n"); abort(); } int i = search(fd); if (IS_FOUND(i, fd)) { - fprintf(stderr, "net_poll_add: socket already added\n"); + fprintf(stderr, "netpoll::add: socket already added\n"); abort(); } if (nfds == NETPOLL_MAXFDS) { - fprintf(stderr, "net_poll_add: NETPOLL_MAXFDS limit\n"); + fprintf(stderr, "netpoll::add: NETPOLL_MAXFDS limit\n"); abort(); } memmove(fds+i+1, fds+i, sizeof(fds[0])*(nfds-i)); nfds++; fds[i] = (struct net_pollfd){ .assoc = assoc, .fd = fd, .type = type }; - net_poll_add_impl(i); + add_impl(i); } -void net_poll_del_and_close(SOCKET fd) +void del_and_close(SOCKET fd) { if (fd == INVALID_SOCKET) { - fprintf(stderr, "net_poll_del_and_close: INVALID_SOCKET\n"); + fprintf(stderr, "netpoll::del_and_close: INVALID_SOCKET\n"); abort(); } int i = search(fd); if (!IS_FOUND(i, fd)) { - fprintf(stderr, "net_poll_del_and_close: socket not added\n"); + fprintf(stderr, "netpoll::del_and_close: socket not added\n"); abort(); } - net_poll_reg_impl(i, 0); - net_poll_del_impl(i); + reg_impl(i, 0); + del_impl(i); memmove(fds+i, fds+i+1, sizeof(fds[0])*(nfds-(i+1))); nfds--; #ifndef NETPOLL_USE_LIBUV closesocket(fd); #endif } -void net_poll_reg(SOCKET fd, int ev) +void reg(SOCKET fd, int ev) { if (fd == INVALID_SOCKET) { - fprintf(stderr, "net_poll_reg: INVALID_SOCKET\n"); + fprintf(stderr, "netpoll::reg: INVALID_SOCKET\n"); abort(); } int i = search(fd); if (!IS_FOUND(i, fd)) { - fprintf(stderr, "net_poll_reg: socket not added\n"); + fprintf(stderr, "netpoll::reg: socket not added\n"); abort(); } - net_poll_reg_impl(i, ev); + reg_impl(i, ev); } -void net_poll_change_type(SOCKET fd, int type) +void change_type(SOCKET fd, int type) { if (fd == INVALID_SOCKET) { - fprintf(stderr, "net_poll_change_type: INVALID_SOCKET\n"); + fprintf(stderr, "netpoll::change_type: INVALID_SOCKET\n"); abort(); } int i = search(fd); if (!IS_FOUND(i, fd)) { - fprintf(stderr, "net_poll_change_type: socket not added\n"); + fprintf(stderr, "netpoll::change_type: socket not added\n"); abort(); } fds[i].type = type; } +} diff --git a/src/netpoll.h b/src/netpoll.h index e4420ec..b0c393b 100644 --- a/src/netpoll.h +++ b/src/netpoll.h @@ -1,19 +1,21 @@ #ifndef NETPOLL_H_ #define NETPOLL_H_ #include "netsock.h" +namespace netpoll { struct net_pollfd { void *assoc; SOCKET fd; int type; }; -void net_poll_init(void); -void net_poll_fini(void); -void net_poll_add(SOCKET fd, int type, void *assoc); -void net_poll_del_and_close(SOCKET fd); -void net_poll_reg(SOCKET fd, int ev); -void net_poll_change_type(SOCKET fd, int type); -int net_poll_begin(void); -int net_poll_get(struct net_pollfd *out); +void init(void); +void fini(void); +void add(SOCKET fd, int type, void *assoc); +void del_and_close(SOCKET fd); +void reg(SOCKET fd, int ev); +void change_type(SOCKET fd, int type); +int begin(void); +int get(struct net_pollfd *out); +} #define NETPOLL_IN 1 #define NETPOLL_OUT 2