From 29f12ceacfb6ddb28fd89301819f2bea27cbf37a Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 10 May 2020 19:59:42 +0200 Subject: add -R to set SO_REUSEPORT --- hittpd.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/hittpd.c b/hittpd.c index 87c9b3f..574d0f1 100644 --- a/hittpd.c +++ b/hittpd.c @@ -102,6 +102,7 @@ int vhost = 0; int quiet = 0; int show_index = 1; int only_public = 0; +int reuse_port = 0; const char *custom_mimetypes = ""; static int @@ -891,7 +892,7 @@ main(int argc, char *argv[]) char *uds = 0; int c; - while ((c = getopt(argc, argv, "h:m:p:qu:IHM:PV")) != -1) + while ((c = getopt(argc, argv, "h:m:p:qu:IHM:PRV")) != -1) switch (c) { case 'h': host = optarg; break; case 'm': custom_mimetypes = optarg; break; @@ -902,12 +903,13 @@ main(int argc, char *argv[]) case 'H': tilde = 1; break; case 'M': default_mimetype = optarg; break; case 'P': only_public = 1; break; + case 'R': reuse_port = 1; break; case 'V': vhost = 1; break; default: fprintf(stderr, "Usage: %s [-h HOST] [-p PORT] [-u SOCKET] " "[-m :.ext=mime/type:...] [-M DEFAULT_MIMETYPE] " - "[-IHPVq] [DIRECTORY]\n", argv[0]); + "[-IHPRVq] [DIRECTORY]\n", argv[0]); exit(1); } @@ -972,6 +974,15 @@ main(int argc, char *argv[]) exit(111); } +#ifdef SO_REUSEPORT + if (reuse_port && + setsockopt(listenfd, SOL_SOCKET, SO_REUSEPORT, + &(int){1}, sizeof (int)) < 0) { + perror("setsockopt(SO_REUSEPORT)"); + exit(111); + } +#endif + r = bind(listenfd, res->ai_addr, res->ai_addrlen); if (r < 0) { perror("bind"); -- cgit 1.4.1