summaryrefslogtreecommitdiffstats
path: root/lib/net/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/server.c')
-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);
}