mirror of
https://github.com/nginx/nginx.git
synced 2026-08-04 14:58:20 +00:00
Added the "so_keepalive=" parameter to the "listen" directive.
The "so_keepalive" directive in mail module was deprecated. Thanks to Vsevolod Stakhov for initial work.
This commit is contained in:
parent
1ea2eb56ef
commit
92edf47ff9
9 changed files with 297 additions and 1 deletions
|
|
@ -462,6 +462,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
void
|
||||
ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
||||
{
|
||||
int keepalive;
|
||||
ngx_uint_t i;
|
||||
ngx_listening_t *ls;
|
||||
|
||||
|
|
@ -499,6 +500,56 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
|||
}
|
||||
}
|
||||
|
||||
if (ls[i].keepalive) {
|
||||
keepalive = (ls[i].keepalive == 1) ? 1 : 0;
|
||||
|
||||
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_KEEPALIVE,
|
||||
(const void *) &keepalive, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(SO_KEEPALIVE, %d) %V failed, ignored",
|
||||
keepalive, &ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
|
||||
|
||||
if (ls[i].keepidle) {
|
||||
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPIDLE,
|
||||
(const void *) &ls[i].keepidle, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(TCP_KEEPIDLE, %d) %V failed, ignored",
|
||||
ls[i].keepidle, &ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
if (ls[i].keepintvl) {
|
||||
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPINTVL,
|
||||
(const void *) &ls[i].keepintvl, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(TCP_KEEPINTVL, %d) %V failed, ignored",
|
||||
ls[i].keepintvl, &ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
if (ls[i].keepcnt) {
|
||||
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPCNT,
|
||||
(const void *) &ls[i].keepcnt, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(TCP_KEEPCNT, %d) %V failed, ignored",
|
||||
ls[i].keepcnt, &ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_SETFIB)
|
||||
if (ls[i].setfib != -1) {
|
||||
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_SETFIB,
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@ struct ngx_listening_s {
|
|||
int backlog;
|
||||
int rcvbuf;
|
||||
int sndbuf;
|
||||
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
|
||||
int keepidle;
|
||||
int keepintvl;
|
||||
int keepcnt;
|
||||
#endif
|
||||
|
||||
/* handler of accepted connection */
|
||||
ngx_connection_handler_pt handler;
|
||||
|
|
@ -60,6 +65,7 @@ struct ngx_listening_s {
|
|||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||
unsigned ipv6only:2;
|
||||
#endif
|
||||
unsigned keepalive:2;
|
||||
|
||||
#if (NGX_HAVE_DEFERRED_ACCEPT)
|
||||
unsigned deferred_accept:1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue