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:
parent
4f98ce5865
commit
55144ccb0a
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user