casperd: bump default socket queue length to SOMAXCONN; make length configurable.
The current default listen queue for casperd is too small (8) and hard-coded. This patch increases the default to SOMAXCONN, and introduces a command line flag that can used to further increase or decrease the queue length. PR: bin/202147 Submitted by: <lidl@pix.net>
This commit is contained in:
parent
91b919580f
commit
3f29c57f4e
@ -35,8 +35,8 @@
|
||||
.Nd "Capability Services friendly daemon"
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
[-Fhv] [-D servconfdir] [-P pidfile] [-S sockpath]
|
||||
.Op Fl Fhv
|
||||
.Op Fl l Ar listenqueue
|
||||
.Op Fl D Ar servconfdir
|
||||
.Op Fl P Ar pidfile
|
||||
.Op Fl S Ar sockpath
|
||||
@ -74,6 +74,12 @@ starts in the background.
|
||||
Print the
|
||||
.Nm
|
||||
usage message.
|
||||
.It Fl l Ar listenqueue
|
||||
Specify depth of socket listen queue for the
|
||||
.Nm
|
||||
daemon.
|
||||
The default queue length is
|
||||
.Pa SOMAXCONN .
|
||||
.It Fl P Ar pidfile
|
||||
Specify alternative location of a file where main process PID will be
|
||||
stored.
|
||||
|
@ -534,7 +534,7 @@ casper_accept(int lsock)
|
||||
}
|
||||
|
||||
static void
|
||||
main_loop(const char *sockpath, struct pidfh *pfh)
|
||||
main_loop(int lqlen, const char *sockpath, struct pidfh *pfh)
|
||||
{
|
||||
fd_set fds;
|
||||
struct sockaddr_un sun;
|
||||
@ -559,7 +559,7 @@ main_loop(const char *sockpath, struct pidfh *pfh)
|
||||
if (bind(lsock, (struct sockaddr *)&sun, sizeof(sun)) == -1)
|
||||
pjdlog_exit(1, "Unable to bind to %s", sockpath);
|
||||
(void)umask(oldumask);
|
||||
if (listen(lsock, 8) == -1)
|
||||
if (listen(lsock, lqlen) == -1)
|
||||
pjdlog_exit(1, "Unable to listen on %s", sockpath);
|
||||
|
||||
for (;;) {
|
||||
@ -627,18 +627,19 @@ main(int argc, char *argv[])
|
||||
struct pidfh *pfh;
|
||||
const char *pidfile, *servconfdir, *sockpath;
|
||||
pid_t otherpid;
|
||||
int ch, debug;
|
||||
int ch, debug, lqlen;
|
||||
bool foreground;
|
||||
|
||||
pjdlog_init(PJDLOG_MODE_STD);
|
||||
|
||||
debug = 0;
|
||||
foreground = false;
|
||||
lqlen = SOMAXCONN;
|
||||
pidfile = CASPERD_PIDFILE;
|
||||
servconfdir = CASPERD_SERVCONFDIR;
|
||||
sockpath = CASPERD_SOCKPATH;
|
||||
|
||||
while ((ch = getopt(argc, argv, "D:FhP:S:v")) != -1) {
|
||||
while ((ch = getopt(argc, argv, "D:Fhl:P:S:v")) != -1) {
|
||||
switch (ch) {
|
||||
case 'D':
|
||||
servconfdir = optarg;
|
||||
@ -646,6 +647,11 @@ main(int argc, char *argv[])
|
||||
case 'F':
|
||||
foreground = true;
|
||||
break;
|
||||
case 'l':
|
||||
lqlen = strtol(optarg, NULL, 0);
|
||||
if (lqlen < 1)
|
||||
lqlen = SOMAXCONN;
|
||||
break;
|
||||
case 'P':
|
||||
pidfile = optarg;
|
||||
break;
|
||||
@ -711,5 +717,5 @@ main(int argc, char *argv[])
|
||||
/*
|
||||
* Wait for connections.
|
||||
*/
|
||||
main_loop(sockpath, pfh);
|
||||
main_loop(lqlen, sockpath, pfh);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user