aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handler.c10
-rw-r--r--include/libweb/handler.h4
-rw-r--r--include/libweb/server.h2
-rw-r--r--server.c6
4 files changed, 16 insertions, 6 deletions
diff --git a/handler.c b/handler.c
index f6e47a3..4abbdb8 100644
--- a/handler.c
+++ b/handler.c
@@ -182,14 +182,20 @@ end:
return ret;
}
-int handler_listen(struct handler *const h, const unsigned short port)
+int handler_listen(struct handler *const h, const unsigned short port,
+ unsigned short *const outport)
{
- if (!(h->server = server_init(port)))
+ if (!(h->server = server_init(port, outport)))
{
fprintf(stderr, "%s: server_init failed\n", __func__);
return -1;
}
+ return 0;
+}
+
+int handler_loop(struct handler *const h)
+{
for (;;)
{
bool exit, io;
diff --git a/include/libweb/handler.h b/include/libweb/handler.h
index f7bc76a..493e24c 100644
--- a/include/libweb/handler.h
+++ b/include/libweb/handler.h
@@ -20,6 +20,8 @@ struct handler *handler_alloc(const struct handler_cfg *cfg);
void handler_free(struct handler *h);
int handler_add(struct handler *h, const char *url, enum http_op op,
handler_fn f, void *user);
-int handler_listen(struct handler *h, unsigned short port);
+int handler_listen(struct handler *h, unsigned short port,
+ unsigned short *outport);
+int handler_loop(struct handler *h);
#endif /* HANDLER_H */
diff --git a/include/libweb/server.h b/include/libweb/server.h
index 74f06ae..b3691aa 100644
--- a/include/libweb/server.h
+++ b/include/libweb/server.h
@@ -4,7 +4,7 @@
#include <stdbool.h>
#include <stddef.h>
-struct server *server_init(unsigned short port);
+struct server *server_init(unsigned short port, unsigned short *outport);
struct server_client *server_poll(struct server *s, bool *io, bool *exit);
int server_read(void *buf, size_t n, struct server_client *c);
int server_write(const void *buf, size_t n, struct server_client *c);
diff --git a/server.c b/server.c
index 8cea044..d460155 100644
--- a/server.c
+++ b/server.c
@@ -320,7 +320,8 @@ static int init_signals(void)
return 0;
}
-struct server *server_init(const unsigned short port)
+struct server *server_init(const unsigned short port,
+ unsigned short *const outport)
{
struct server *const s = malloc(sizeof *s);
@@ -373,8 +374,9 @@ struct server *server_init(const unsigned short port)
fprintf(stderr, "%s: getsockname(2): %s\n", __func__, strerror(errno));
goto failure;
}
+ else if (outport)
+ *outport = ntohs(in.sin_port);
- printf("Listening on port %hu\n", ntohs(in.sin_port));
return s;
failure: