From: Claudio Jeker Subject: bgpd: set the socketpair socketbuffer size only once To: tech@openbsd.org Date: Tue, 3 Dec 2024 14:28:06 +0100 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); } } }