Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Oct 2015 02:34:41 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r289204 - head/sbin/casperd
Message-ID:  <201510130234.t9D2Yf1a034409@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Tue Oct 13 02:34:41 2015
New Revision: 289204
URL: https://svnweb.freebsd.org/changeset/base/289204

Log:
  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>

Modified:
  head/sbin/casperd/casperd.8
  head/sbin/casperd/casperd.c

Modified: head/sbin/casperd/casperd.8
==============================================================================
--- head/sbin/casperd/casperd.8	Tue Oct 13 02:32:15 2015	(r289203)
+++ head/sbin/casperd/casperd.8	Tue Oct 13 02:34:41 2015	(r289204)
@@ -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.

Modified: head/sbin/casperd/casperd.c
==============================================================================
--- head/sbin/casperd/casperd.c	Tue Oct 13 02:32:15 2015	(r289203)
+++ head/sbin/casperd/casperd.c	Tue Oct 13 02:34:41 2015	(r289204)
@@ -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 p
 	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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510130234.t9D2Yf1a034409>