Improve error handling
This commit is contained in:
parent
f7583f538e
commit
1a13289da9
29
main.c
29
main.c
@ -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;
|
||||
if (errno != EINTR)
|
||||
fprintf(stderr, "Error accepting connection\n");
|
||||
return 1;
|
||||
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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user