diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sockopt.c | 14 |
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, |
