summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnny Richard <johnny@johnnyrichard.com>2022-04-10 02:42:04 +0200
committerJohnny Richard <johnny@johnnyrichard.com>2022-04-10 02:42:04 +0200
commitcfd0f74bb8156a537a9482222be31723420b035e (patch)
tree181aefd9ebf1eff17c39a987258b333ee427f3a2
parent2b8ba909c7e24c16f2b7b0c6b738610218d27dee (diff)
Refactor server initialization
-rw-r--r--main.c5
-rw-r--r--server.c26
-rw-r--r--server.h4
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 <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;
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 */