Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
bgpd: set the socketpair socketbuffer size only once
To:
tech@openbsd.org
Date:
Tue, 3 Dec 2024 14:28:06 +0100

Download raw body.

Thread
For good performance it makes sense to bump the socket buffers to 4 times
the IBUF_READ_SIZE (aka MAX_SOCK_BUF). It makes little sense to do this
loop dance around those setsockopts. It either works or it will most
probably always fail.

-- 
:wq Claudio

Index: bgpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
diff -u -p -r1.279 bgpd.c
--- bgpd.c	2 Dec 2024 15:13:57 -0000	1.279
+++ bgpd.c	3 Dec 2024 13:24:23 -0000
@@ -1306,29 +1306,23 @@ getsockpair(int pipe[2])
 		fatal("socketpair");
 
 	for (i = 0; i < 2; i++) {
-		for (bsize = MAX_SOCK_BUF; bsize >= 16 * 1024; bsize /= 2) {
-			if (setsockopt(pipe[i], SOL_SOCKET, SO_RCVBUF,
-			    &bsize, sizeof(bsize)) == -1) {
-				if (errno != ENOBUFS)
-					fatal("setsockopt(SO_RCVBUF, %d)",
-					    bsize);
-				log_warn("setsockopt(SO_RCVBUF, %d)", bsize);
-				continue;
-			}
-			break;
+		bsize = MAX_SOCK_BUF;
+		if (setsockopt(pipe[i], SOL_SOCKET, SO_RCVBUF,
+		    &bsize, sizeof(bsize)) == -1) {
+			if (errno != ENOBUFS)
+				fatal("setsockopt(SO_RCVBUF, %d)",
+				    bsize);
+			log_warn("setsockopt(SO_RCVBUF, %d)", bsize);
 		}
 	}
 	for (i = 0; i < 2; i++) {
-		for (bsize = MAX_SOCK_BUF; bsize >= 16 * 1024; bsize /= 2) {
-			if (setsockopt(pipe[i], SOL_SOCKET, SO_SNDBUF,
-			    &bsize, sizeof(bsize)) == -1) {
-				if (errno != ENOBUFS)
-					fatal("setsockopt(SO_SNDBUF, %d)",
-					    bsize);
-				log_warn("setsockopt(SO_SNDBUF, %d)", bsize);
-				continue;
-			}
-			break;
+		bsize = MAX_SOCK_BUF;
+		if (setsockopt(pipe[i], SOL_SOCKET, SO_SNDBUF,
+		    &bsize, sizeof(bsize)) == -1) {
+			if (errno != ENOBUFS)
+				fatal("setsockopt(SO_SNDBUF, %d)",
+				    bsize);
+			log_warn("setsockopt(SO_SNDBUF, %d)", bsize);
 		}
 	}
 }