diff options
author | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-22 23:39:18 +0300 |
---|---|---|
committer | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-22 23:39:18 +0300 |
commit | ea106f819487e363ad2eb422f23da9b7cdec9380 (patch) | |
tree | 3d53e4a4344f84e7fc458612b627b98b0fc439b3 | |
parent | 9893fb055910bb2a39565e38c3b3524651648776 (diff) |
fix(net/lib/server): memory leaks
-rw-r--r-- | lib/net/server.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/net/server.c b/lib/net/server.c index 3668462..75604db 100644 --- a/lib/net/server.c +++ b/lib/net/server.c @@ -8,12 +8,14 @@ server_t* server_init_tcp(const char* addr, const char* port) { srv->listen_socket_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); if (srv->listen_socket_fd == -1) { + free(srv); fprintf(stderr, "[server_init_tcp] Unable to create socket!\n"); exit(EXIT_FAILURE); } int setsockopt_yes = 1; if (setsockopt(srv->listen_socket_fd, SOL_SOCKET, SO_REUSEADDR, &setsockopt_yes, sizeof(setsockopt_yes)) == -1) { + free(srv); fprintf(stderr, "[server_init_tcp] Unable to set SO_REUSEADDR socket option\n"); exit(EXIT_FAILURE); } @@ -22,6 +24,7 @@ server_t* server_init_tcp(const char* addr, const char* port) { if (bind(srv->listen_socket_fd, (struct sockaddr*) listen_addr, sizeof(*listen_addr)) == -1) { free(listen_addr); + free(srv); fprintf(stderr, "[server_init_tcp] Unable to bind\n"); exit(EXIT_FAILURE); } @@ -29,12 +32,14 @@ server_t* server_init_tcp(const char* addr, const char* port) { free(listen_addr); if (listen(srv->listen_socket_fd, CONNECTION_QUEUE_LEN) == -1) { + free(srv); fprintf(stderr, "[server_init_tcp] Unable to listen() on a socket\n"); exit(EXIT_FAILURE); } struct linger linger_params = {.l_onoff = 1, .l_linger = 1}; if (setsockopt(srv->listen_socket_fd, SOL_SOCKET, SO_LINGER, &linger_params, sizeof(linger_params)) == -1) { + free(srv); fprintf(stderr, "[server_init_tcp] Unable to modify SO_LINGER socket option\n"); exit(EXIT_FAILURE); } @@ -44,6 +49,7 @@ server_t* server_init_tcp(const char* addr, const char* port) { void server_shutdown(server_t* srv) { if (close(srv->listen_socket_fd) == -1) { + free(srv); fprintf(stderr, "[server_shutdown] Unable to close listen socket\n"); exit(EXIT_FAILURE); } |