From cfd0f74bb8156a537a9482222be31723420b035e Mon Sep 17 00:00:00 2001 From: Johnny Richard Date: Sun, 10 Apr 2022 02:42:04 +0200 Subject: Refactor server initialization --- main.c | 5 +++-- server.c | 26 +++++++++++++------------- server.h | 4 ++-- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/main.c b/main.c index 5dd3201..121968f 100644 --- a/main.c +++ b/main.c @@ -25,8 +25,9 @@ int main() { sigaction(SIGPIPE, &(struct sigaction){SIG_IGN}, NULL); - server_t server = server_create(SERVER_PORT); - server_start(&server); + server_t server; + server_init(&server, SERVER_PORT); + server_run(&server); return EXIT_SUCCESS; } diff --git a/server.c b/server.c index ab1b7a2..25d9c45 100644 --- a/server.c +++ b/server.c @@ -18,6 +18,7 @@ #include "log.h" #include "server.h" +#include #include #include #include @@ -34,14 +35,18 @@ static void server_handle_client_data(server_t *server, struct epoll_event *event); static void server_handle_server_data(server_t *server, struct epoll_event *event); -server_t -server_create(uint32_t port) +void +server_init(server_t *server, uint32_t port) { + assert(server != NULL); + memset(server, 0, sizeof(server)); + int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { log_error("unable to create a socket: %s", strerror(errno)); exit(EXIT_FAILURE); } + server->fd = server_fd; struct sockaddr_in server_addr; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); @@ -63,33 +68,28 @@ server_create(uint32_t port) exit(EXIT_FAILURE); } - server_t server; - memset(&server, 0, sizeof(server)); - server.fd = server_fd; - memset(server.connected_clients, EMPTY_CCLIENT_SPOT, sizeof(int) * MAXEVENTS); + memset(server->connected_clients, EMPTY_CCLIENT_SPOT, sizeof(int) * MAXEVENTS); - server.epoll_fd = epoll_create1(0); - if (server.epoll_fd == -1) { + server->epoll_fd = epoll_create1(0); + if (server->epoll_fd == -1) { log_error("faild to create epoll: %s", strerror(errno)); exit(EXIT_FAILURE); } struct epoll_event event; event.events = EPOLLIN; - event.data.fd = server.fd; + event.data.fd = server->fd; - if (epoll_ctl(server.epoll_fd, EPOLL_CTL_ADD, server.fd, &event) == -1) { + if (epoll_ctl(server->epoll_fd, EPOLL_CTL_ADD, server->fd, &event) == -1) { log_error("could not add server to epoll: %s", strerror(errno)); exit(EXIT_FAILURE); } log_info("server listening at port (%d)", port); - - return server; } void -server_start(server_t *server) +server_run(server_t *server) { server->running = true; diff --git a/server.h b/server.h index a718fd6..4cc1ab2 100644 --- a/server.h +++ b/server.h @@ -32,7 +32,7 @@ typedef struct server { bool running; } server_t; -server_t server_create(uint32_t port); -void server_start(server_t *server); +void server_init(server_t *server, uint32_t port); +void server_run(server_t *server); #endif /* SERVER_H */ -- cgit v1.2.3