]> git.ipfire.org Git - thirdparty/git.git/commitdiff
unix-socket: add backlog size option to unix_stream_listen()
authorJeff Hostetler <jeffhost@microsoft.com>
Mon, 15 Mar 2021 21:08:25 +0000 (21:08 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Mar 2021 21:32:51 +0000 (14:32 -0700)
Update `unix_stream_listen()` to take an options structure to override
default behaviors.  This commit includes the size of the `listen()` backlog.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/credential-cache--daemon.c
unix-socket.c
unix-socket.h

index c61f123a3b81beef04d418142d0fae8b0ffd9dbe..4c6c89ab0de2eb3dbc2785033249e853aea32f16 100644 (file)
@@ -203,9 +203,10 @@ static int serve_cache_loop(int fd)
 
 static void serve_cache(const char *socket_path, int debug)
 {
+       struct unix_stream_listen_opts opts = UNIX_STREAM_LISTEN_OPTS_INIT;
        int fd;
 
-       fd = unix_stream_listen(socket_path);
+       fd = unix_stream_listen(socket_path, &opts);
        if (fd < 0)
                die_errno("unable to bind to '%s'", socket_path);
 
index 69f81d64e9d556e449e872c5f791e7959c6b06c2..012becd93d577d3e1a74beb39857a8a5cff0f0a6 100644 (file)
@@ -1,6 +1,8 @@
 #include "cache.h"
 #include "unix-socket.h"
 
+#define DEFAULT_UNIX_STREAM_LISTEN_BACKLOG (5)
+
 static int chdir_len(const char *orig, int len)
 {
        char *path = xmemdupz(orig, len);
@@ -89,9 +91,11 @@ fail:
        return -1;
 }
 
-int unix_stream_listen(const char *path)
+int unix_stream_listen(const char *path,
+                      const struct unix_stream_listen_opts *opts)
 {
        int fd = -1, saved_errno;
+       int backlog;
        struct sockaddr_un sa;
        struct unix_sockaddr_context ctx;
 
@@ -106,7 +110,10 @@ int unix_stream_listen(const char *path)
        if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
                goto fail;
 
-       if (listen(fd, 5) < 0)
+       backlog = opts->listen_backlog_size;
+       if (backlog <= 0)
+               backlog = DEFAULT_UNIX_STREAM_LISTEN_BACKLOG;
+       if (listen(fd, backlog) < 0)
                goto fail;
 
        unix_sockaddr_cleanup(&ctx);
index e271aeec5a07dc8b38b87345046e8eba642b16b1..ec2fb3ea726714934d430c944c8af5b00f8ac061 100644 (file)
@@ -1,7 +1,14 @@
 #ifndef UNIX_SOCKET_H
 #define UNIX_SOCKET_H
 
+struct unix_stream_listen_opts {
+       int listen_backlog_size;
+};
+
+#define UNIX_STREAM_LISTEN_OPTS_INIT { 0 }
+
 int unix_stream_connect(const char *path);
-int unix_stream_listen(const char *path);
+int unix_stream_listen(const char *path,
+                      const struct unix_stream_listen_opts *opts);
 
 #endif /* UNIX_SOCKET_H */