From f44bf47b1f05307134078a1d60faa9e2ceccf2c9 Mon Sep 17 00:00:00 2001 From: Job Snijders Date: Wed, 1 May 2024 11:59:20 +0000 Subject: [PATCH] Don't try to maximize the send buffer Get rid of code that did a binary search to maximize the send buffer via setsockopt SO_SNDBUF. It caused problems for modern Mac users. --- CHANGES | 3 ++ Makefile.am | 1 - VERSION | 2 +- expander.c | 10 ----- extern.h | 3 -- sx_maxsockbuf.c | 117 ------------------------------------------------ 6 files changed, 4 insertions(+), 132 deletions(-) delete mode 100644 sx_maxsockbuf.c diff --git a/CHANGES b/CHANGES index 0813085..ee191e4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +1.13 (2024-05-01) + - Fixed a bug for Mac users by removing sx_maxsockbuf() + 1.12 (2024-02-12) - Fix a bug in the mikrotik printer diff --git a/Makefile.am b/Makefile.am index 26e59fd..e3e74c9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,7 +17,6 @@ bgpq4_LDADD += $(top_builddir)/compat/libcompat.la endif bgpq4_SOURCES=main.c extern.h printer.c expander.c \ - sx_maxsockbuf.c \ sx_prefix.c sx_prefix.h \ sx_report.c sx_report.h \ sx_slentry.c diff --git a/VERSION b/VERSION index 809bdcb..d3456a9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.12 +1.13 diff --git a/expander.c b/expander.c index f3e674b..ca424d9 100644 --- a/expander.c +++ b/expander.c @@ -1075,16 +1075,6 @@ bgpq_expand(struct bgpq_expander *b) continue; } - err = sx_maxsockbuf(fd, SO_SNDBUF); - if (err > 0) { - SX_DEBUG(debug_expander, "Acquired sendbuf of %i " - "bytes\n", err); - } else { - close(fd); - fd = -1; - continue; - } - break; } diff --git a/extern.h b/extern.h index 0b07fcf..0f3179d 100644 --- a/extern.h +++ b/extern.h @@ -149,9 +149,6 @@ void sx_radix_tree_freeall(struct sx_radix_tree *t); void bgpq_prequest_freeall(struct bgpq_prequest *bpr); void expander_freeall(struct bgpq_expander *expander); -/* s - number of opened socket, dir is either SO_SNDBUF or SO_RCVBUF */ -int sx_maxsockbuf(int s, int dir); - #ifndef HAVE_STRLCPY size_t strlcpy(char *dst, const char *src, size_t size); #endif diff --git a/sx_maxsockbuf.c b/sx_maxsockbuf.c deleted file mode 100644 index 24631f3..0000000 --- a/sx_maxsockbuf.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2019-2020 Job Snijders - * Copyright (c) 2007-2019 Alexandre Snarskii - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "extern.h" -#include "sx_report.h" - -int -sx_maxsockbuf(int s, int dir) -{ - int optval = 0, voptval; - int hiconf = -1, loconf = -1; - socklen_t voptlen; - int phase = 0, iterations = 0; - - if (s < 0) { - sx_report(SX_FATAL,"Unable to maximize sockbuf on invalid " - "socket %i\n", s); - exit(1); - } - - voptlen = sizeof(optval); - - if (getsockopt(s, SOL_SOCKET, dir, (void*)&optval, &voptlen) == -1) { - sx_report(SX_ERROR,"initial getsockopt failed: %s\n", - strerror(errno)); - return -1; - } - - for (;;) { - iterations++; - - if (phase == 0) - optval <<= 1; - else { - if (optval == (hiconf + loconf) / 2) - break; - optval = (hiconf + loconf) / 2; - } - - if (setsockopt(s, SOL_SOCKET, dir, (void*)&optval, - sizeof(optval)) == -1) { - - if (phase == 0) - phase = 1; - - hiconf = optval; - - continue; - } else { - loconf = optval; - } - - voptlen = sizeof(voptval); - - if (getsockopt(s, SOL_SOCKET, dir, (void*)&voptval, - &voptlen) == -1) { - sx_report(SX_ERROR,"getsockopt failed: %s\n", - strerror(errno)); - return -1; - } else if (voptval < optval) { - if (phase == 0) { - phase = 1; - optval >>= 1; - continue; - } else if (phase == 1) { - phase = 2; - optval -= 2048; - continue; - } else - break; - } - } - - voptlen = sizeof(voptval); - if (getsockopt(s, SOL_SOCKET, dir, (void*)&voptval, - &voptlen) == -1) { - sx_report(SX_ERROR,"getsockopt(final stage) failed: %s\n", - strerror(errno)); - return -1; - } else - return voptval; -}