diff options
author | Johnny Richard <johnny@johnnyrichard.com> | 2022-04-10 02:42:04 +0200 |
---|---|---|
committer | Johnny Richard <johnny@johnnyrichard.com> | 2022-04-10 02:42:04 +0200 |
commit | cfd0f74bb8156a537a9482222be31723420b035e (patch) | |
tree | 181aefd9ebf1eff17c39a987258b333ee427f3a2 | |
parent | 2b8ba909c7e24c16f2b7b0c6b738610218d27dee (diff) |
Refactor server initialization
-rw-r--r-- | main.c | 5 | ||||
-rw-r--r-- | server.c | 26 | ||||
-rw-r--r-- | server.h | 4 |
3 files changed, 18 insertions, 17 deletions
@@ -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; } @@ -18,6 +18,7 @@ #include "log.h" #include "server.h" +#include <assert.h> #include <sys/epoll.h> #include <netinet/in.h> #include <stdio.h> @@ -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; @@ -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 */ |