unix-socket: add backlog size option to unix_stream_listen()

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>
This commit is contained in:
Jeff Hostetler 2021-03-15 21:08:25 +00:00 committed by Junio C Hamano
parent 4f98ce5865
commit 55144ccb0a
3 changed files with 19 additions and 4 deletions

View File

@ -203,9 +203,10 @@ static int serve_cache_loop(int fd)
static void serve_cache(const char *socket_path, int debug) static void serve_cache(const char *socket_path, int debug)
{ {
struct unix_stream_listen_opts opts = UNIX_STREAM_LISTEN_OPTS_INIT;
int fd; int fd;
fd = unix_stream_listen(socket_path); fd = unix_stream_listen(socket_path, &opts);
if (fd < 0) if (fd < 0)
die_errno("unable to bind to '%s'", socket_path); die_errno("unable to bind to '%s'", socket_path);

View File

@ -1,6 +1,8 @@
#include "cache.h" #include "cache.h"
#include "unix-socket.h" #include "unix-socket.h"
#define DEFAULT_UNIX_STREAM_LISTEN_BACKLOG (5)
static int chdir_len(const char *orig, int len) static int chdir_len(const char *orig, int len)
{ {
char *path = xmemdupz(orig, len); char *path = xmemdupz(orig, len);
@ -89,9 +91,11 @@ fail:
return -1; 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 fd = -1, saved_errno;
int backlog;
struct sockaddr_un sa; struct sockaddr_un sa;
struct unix_sockaddr_context ctx; 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) if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
goto fail; 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; goto fail;
unix_sockaddr_cleanup(&ctx); unix_sockaddr_cleanup(&ctx);

View File

@ -1,7 +1,14 @@
#ifndef UNIX_SOCKET_H #ifndef UNIX_SOCKET_H
#define 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_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 */ #endif /* UNIX_SOCKET_H */