Improve error handling

This commit is contained in:
Camden Dixie O'Brien 2022-10-13 13:45:01 +01:00
parent f7583f538e
commit 1a13289da9

31
main.c
View File

@ -20,6 +20,7 @@
#include <netinet/in.h>
#include <signal.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
@ -39,6 +40,8 @@ int main(int argc, char *argv[])
(void)argc;
(void)argv;
int res = EXIT_SUCCESS;
/*
* Register signal handler for SIGTERM and SIGINT.
*
@ -48,11 +51,11 @@ int main(int argc, char *argv[])
*/
if (signal(SIGTERM, handle_exit_signal) == SIG_ERR) {
fprintf(stderr, "Failed to register SIGTERM signal handler\n");
return 1;
return EXIT_FAILURE;
}
if (signal(SIGINT, handle_exit_signal) == SIG_ERR) {
fprintf(stderr, "Failed to register SIGINT signal handler\n");
return 1;
return EXIT_FAILURE;
}
/*
@ -65,7 +68,7 @@ int main(int argc, char *argv[])
int sfd = socket(AF_INET6, SOCK_STREAM, 0);
if (sfd == -1) {
fprintf(stderr, "Failed to open socket\n");
return 1;
return EXIT_FAILURE;
}
const struct sockaddr_in6 haddr = {
.sin6_family = AF_INET6,
@ -74,11 +77,13 @@ int main(int argc, char *argv[])
};
if (bind(sfd, (const struct sockaddr *)&haddr, sizeof(haddr)) == -1) {
fprintf(stderr, "Error binding socket to address\n");
return 1;
res = EXIT_FAILURE;
goto close_server_socket;
}
if (listen(sfd, 8) == -1) {
fprintf(stderr, "Error attempting to listen on socket\n");
return 1;
res = EXIT_FAILURE;
goto close_server_socket;
}
struct sockaddr_in6 paddr;
@ -100,10 +105,9 @@ int main(int argc, char *argv[])
*/
cfd = accept(sfd, (struct sockaddr *)&paddr, &paddr_size);
if (cfd == -1) {
if (errno == EINTR)
continue;
fprintf(stderr, "Error accepting connection\n");
return 1;
if (errno != EINTR)
fprintf(stderr, "Error accepting connection\n");
continue;
}
/*
@ -118,7 +122,7 @@ int main(int argc, char *argv[])
} while (errno == EINTR);
if (n == -1) {
fprintf(stderr, "Error reading selector from client\n");
return 1;
goto close_client_socket;
}
/*
@ -135,16 +139,17 @@ int main(int argc, char *argv[])
}
if (slen == n) {
fprintf(stderr, "Received invalid selector (no CRLF)\n");
return 1;
goto close_client_socket;
}
sbuf[slen] = '\0';
printf("Received selector: \"%s\"\n", sbuf);
close_client_socket:
close(cfd);
}
close_server_socket:
close(sfd);
return 0;
return res;
}