diff options
author | Leah Neukirchen <leah@vuxu.org> | 2020-05-10 19:59:42 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2020-05-10 19:59:42 +0200 |
commit | 29f12ceacfb6ddb28fd89301819f2bea27cbf37a (patch) | |
tree | 778e2d71dcccd5f797e900d92adca56c0c3feb6d | |
parent | 3a48e15c894b85f2a98f2f2cc8e9fc0529e82345 (diff) | |
download | hittpd-29f12ceacfb6ddb28fd89301819f2bea27cbf37a.tar.gz hittpd-29f12ceacfb6ddb28fd89301819f2bea27cbf37a.tar.xz hittpd-29f12ceacfb6ddb28fd89301819f2bea27cbf37a.zip |
add -R to set SO_REUSEPORT
-rw-r--r-- | hittpd.c | 15 |
1 files 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"); |