summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 23:39:18 +0300
committermrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 23:39:18 +0300
commitea106f819487e363ad2eb422f23da9b7cdec9380 (patch)
tree3d53e4a4344f84e7fc458612b627b98b0fc439b3
parent9893fb055910bb2a39565e38c3b3524651648776 (diff)
fix(net/lib/server): memory leaks
-rw-r--r--lib/net/server.c6
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);
}