Revert "Set send and receive buffers on socket"
This reverts commit 1d4e82ba90d413b0d5be8d2e21bc5baff83c544a.
This commit is contained in:
@@ -2050,15 +2050,13 @@ free_socket(isc__socket_t **socketp) {
|
||||
}
|
||||
|
||||
#ifdef SO_RCVBUF
|
||||
static isc_once_t rcvsndbuf_once = ISC_ONCE_INIT;
|
||||
static isc_once_t rcvbuf_once = ISC_ONCE_INIT;
|
||||
static int rcvbuf = RCVBUFSIZE;
|
||||
static int sndbuf = SNDBUFSIZE;
|
||||
|
||||
static void
|
||||
set_rcvsndbuf(void) {
|
||||
set_rcvbuf(void) {
|
||||
int fd;
|
||||
int maxrcv = rcvbuf, minrcv;
|
||||
int maxsnd = sndbuf, minsnd;
|
||||
int max = rcvbuf, min;
|
||||
ISC_SOCKADDR_LEN_T len;
|
||||
|
||||
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
@@ -2079,52 +2077,28 @@ set_rcvsndbuf(void) {
|
||||
if (fd == -1)
|
||||
return;
|
||||
|
||||
len = sizeof(minrcv);
|
||||
while (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&minrcv, &len) == 0 &&
|
||||
minrcv < rcvbuf) {
|
||||
len = sizeof(min);
|
||||
if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&min, &len) == 0 &&
|
||||
min < rcvbuf) {
|
||||
again:
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&rcvbuf,
|
||||
sizeof(rcvbuf)) == -1) {
|
||||
if (errno == ENOBUFS && rcvbuf > minrcv) {
|
||||
maxrcv = rcvbuf - 1;
|
||||
rcvbuf = (rcvbuf + minrcv) / 2;
|
||||
continue;
|
||||
if (errno == ENOBUFS && rcvbuf > min) {
|
||||
max = rcvbuf - 1;
|
||||
rcvbuf = (rcvbuf + min) / 2;
|
||||
goto again;
|
||||
} else {
|
||||
rcvbuf = minrcv;
|
||||
break;
|
||||
rcvbuf = min;
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
minrcv = rcvbuf;
|
||||
}
|
||||
|
||||
if (minrcv != maxrcv) {
|
||||
rcvbuf = maxrcv;
|
||||
} else {
|
||||
break;
|
||||
} else
|
||||
min = rcvbuf;
|
||||
if (min != max) {
|
||||
rcvbuf = max;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
while (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (void *)&minsnd, &len) == 0 &&
|
||||
minsnd < sndbuf) {
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (void *)&sndbuf,
|
||||
sizeof(sndbuf)) == -1) {
|
||||
if (errno == ENOBUFS && sndbuf > minsnd) {
|
||||
maxsnd = sndbuf - 1;
|
||||
sndbuf = (sndbuf + minsnd) / 2;
|
||||
continue;
|
||||
} else {
|
||||
sndbuf = minsnd;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
minsnd = sndbuf;
|
||||
}
|
||||
|
||||
if (minsnd != maxsnd) {
|
||||
sndbuf = maxsnd;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
close (fd);
|
||||
}
|
||||
#endif
|
||||
@@ -2566,8 +2540,8 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock,
|
||||
optlen = sizeof(size);
|
||||
if (getsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF,
|
||||
(void *)&size, &optlen) == 0 && size < rcvbuf) {
|
||||
RUNTIME_CHECK(isc_once_do(&rcvsndbuf_once,
|
||||
set_rcvsndbuf) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_once_do(&rcvbuf_once,
|
||||
set_rcvbuf) == ISC_R_SUCCESS);
|
||||
if (setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF,
|
||||
(void *)&rcvbuf, sizeof(rcvbuf)) == -1) {
|
||||
strerror_r(errno, strbuf, sizeof(strbuf));
|
||||
@@ -2581,23 +2555,6 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock,
|
||||
strbuf);
|
||||
}
|
||||
}
|
||||
if (getsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF,
|
||||
(void *)&size, &optlen) == 0 && size < sndbuf) {
|
||||
RUNTIME_CHECK(isc_once_do(&rcvsndbuf_once,
|
||||
set_rcvsndbuf) == ISC_R_SUCCESS);
|
||||
if (setsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF,
|
||||
(void *)&sndbuf, sizeof(sndbuf)) == -1) {
|
||||
strerror_r(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"setsockopt(%d, SO_SNDBUF, %d) %s: %s",
|
||||
sock->fd, sndbuf,
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strbuf);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SO_SNDBUF)
|
||||
|
||||
Reference in New Issue
Block a user