mirror of
https://github.com/nginx/nginx.git
synced 2024-11-25 10:20:21 -06:00
Core: implement TCP_KEEPALIVE on Darwin
In earlier versions, macOS only supported setting TCP_KEEPALIVE in place of TCP_KEEPIDLE, but macOS has supported TCP_KEEPINTVL and TCP_KEEPCNT since 10.8 in 2012. Ref: https://lists.apple.com/archives/macnetworkprog/2012/Jul/msg00005.html2ff845c2e0/bsd/netinet/tcp.h (L215-L230)
8d741a5de7/bsd/netinet/tcp.h (L226-L241)
This commit is contained in:
parent
7cd60cd475
commit
aedc0b15d1
@ -118,3 +118,19 @@ ngx_feature_libs=
|
||||
ngx_feature_test="int32_t lock = 0;
|
||||
if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# TCP keepalive
|
||||
|
||||
ngx_feature="TCP_KEEPALIVE"
|
||||
ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPALIVE, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
|
||||
. auto/feature
|
||||
|
26
auto/unix
26
auto/unix
@ -508,18 +508,20 @@ ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_DEFER_ACCEPT, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="TCP_KEEPIDLE"
|
||||
ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
|
||||
. auto/feature
|
||||
if [ -z "$NGX_HAVE_KEEPALIVE_TUNABLE" ]; then
|
||||
ngx_feature="TCP_KEEPIDLE"
|
||||
ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
|
||||
setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="TCP_FASTOPEN"
|
||||
|
@ -772,6 +772,7 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
||||
value *= NGX_KEEPALIVE_FACTOR;
|
||||
#endif
|
||||
|
||||
#ifdef TCP_KEEPIDLE
|
||||
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPIDLE,
|
||||
(const void *) &value, sizeof(int))
|
||||
== -1)
|
||||
@ -780,6 +781,17 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
||||
"setsockopt(TCP_KEEPIDLE, %d) %V failed, ignored",
|
||||
value, &ls[i].addr_text);
|
||||
}
|
||||
#elif defined(TCP_KEEPALIVE)
|
||||
/* The equivalent of TCP_KEEPIDLE on Darwin is TCP_KEEPALIVE. */
|
||||
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPALIVE,
|
||||
(const void *) &value, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(TCP_KEEPALIVE, %d) %V failed, ignored",
|
||||
value, &ls[i].addr_text);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ls[i].keepintvl) {
|
||||
|
Loading…
Reference in New Issue
Block a user