summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sockopt.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/sockopt.c b/lib/sockopt.c
index ed681710e5..b9b9a71167 100644
--- a/lib/sockopt.c
+++ b/lib/sockopt.c
@@ -23,9 +23,12 @@ void setsockopt_so_recvbuf(int sock, int size)
{
int orig_req = size;
- while (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size))
- == -1)
+ while (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) ==
+ -1) {
+ if (size == 0)
+ break;
size /= 2;
+ }
if (size != orig_req)
flog_err(EC_LIB_SOCKET,
@@ -37,9 +40,12 @@ void setsockopt_so_sendbuf(const int sock, int size)
{
int orig_req = size;
- while (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size))
- == -1)
+ while (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) ==
+ -1) {
+ if (size == 0)
+ break;
size /= 2;
+ }
if (size != orig_req)
flog_err(EC_LIB_SOCKET,