From: Felix Fietkau Date: Mon, 31 Dec 2012 16:40:23 +0000 (+0100) Subject: exit if no sockets could be bound X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuhttpd.git;a=commitdiff_plain;h=b6d9114baa1f8323084001fd4bc44fb08f7f1b35 exit if no sockets could be bound --- diff --git a/listen.c b/listen.c index 7e59d1d..13054fb 100644 --- a/listen.c +++ b/listen.c @@ -98,7 +98,7 @@ int uh_socket_bind(const char *host, const char *port, bool tls) if ((status = getaddrinfo(host, port, &hints, &addrs)) != 0) { fprintf(stderr, "getaddrinfo(): %s\n", gai_strerror(status)); - return -1; + return 0; } /* try to bind a new socket to each found address */ @@ -163,6 +163,7 @@ int uh_socket_bind(const char *host, const char *port, bool tls) l->fd.fd = sock; l->tls = tls; list_add_tail(&l->list, &listeners); + bound++; continue; diff --git a/main.c b/main.c index 1172640..09c66c4 100644 --- a/main.c +++ b/main.c @@ -98,7 +98,7 @@ static void uh_config_parse(void) fclose(c); } -static void add_listener_arg(char *arg, bool tls) +static int add_listener_arg(char *arg, bool tls) { char *host = NULL; char *port = arg; @@ -110,7 +110,8 @@ static void add_listener_arg(char *arg, bool tls) port = s + 1; *s = 0; } - uh_socket_bind(host, port, tls); + + return uh_socket_bind(host, port, tls); } static int usage(const char *name) @@ -174,6 +175,7 @@ int main(int argc, char **argv) char *port; int opt, ch; int cur_fd; + int bound = 0; init_defaults(); signal(SIGPIPE, SIG_IGN); @@ -186,7 +188,7 @@ int main(int argc, char **argv) tls = true; /* fall through */ case 'p': - add_listener_arg(optarg, tls); + bound += add_listener_arg(optarg, tls); break; case 'h': @@ -289,6 +291,11 @@ int main(int argc, char **argv) uh_config_parse(); + if (!bound) { + fprintf(stderr, "Error: No sockets bound, unable to continue\n"); + return 1; + } + /* fork (if not disabled) */ if (!nofork) { switch (fork()) {