Download raw body.
bgpd: set the socketpair socketbuffer size only once
On Tue, Dec 03, 2024 at 02:28:06PM +0100, Claudio Jeker wrote:
> 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.
I've seen such a dance in bgpq4 and was scratching my head.
ok tb
>
> --
> :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);
> }
> }
> }
>
bgpd: set the socketpair socketbuffer size only once