aboutsummaryrefslogtreecommitdiffstats
path: root/wg_dynamic_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'wg_dynamic_server.c')
-rw-r--r--wg_dynamic_server.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/wg_dynamic_server.c b/wg_dynamic_server.c
index dcc7737..75bf3af 100644
--- a/wg_dynamic_server.c
+++ b/wg_dynamic_server.c
@@ -7,6 +7,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
const char *PROG_NAME;
@@ -17,6 +18,10 @@ static void show_usage()
int main(int argc, char *argv[])
{
+ const char *iface;
+ int sock;
+ int ret;
+
PROG_NAME = argv[0];
if (argc == 1) {
@@ -24,10 +29,25 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}
- if (setup_server(argv[1]) < 0) {
- perror("error setting up server");
+ iface = argv[1];
+
+ if (!is_wg_up_on_iface(iface)) {
+ fprintf(stderr, "no such wireguard iface %s\n", iface);
+ return EXIT_FAILURE;
+ }
+
+ if ((sock = setup_server(argv[1])) < 0) {
+ fprintf(stderr, "error setting up server: %s\n",
+ strerror(-sock));
+ return EXIT_FAILURE;
+ }
+
+ if ((ret = handle_connections(sock)) < 0) {
+ fprintf(stderr, "error while handling connections: %s\n",
+ strerror(-ret));
return EXIT_FAILURE;
}
- return EXIT_SUCCESS;
+ /* unreachable */
+ return EXIT_FAILURE;
}