On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.

Based on a patch by Sepherosa Ziehau.
This commit is contained in:
Ruslan Ermilov 2013-07-25 12:46:03 +04:00
parent 690e2b33aa
commit 02a077b827
2 changed files with 21 additions and 4 deletions

View File

@ -515,24 +515,36 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
#if (NGX_HAVE_KEEPALIVE_TUNABLE) #if (NGX_HAVE_KEEPALIVE_TUNABLE)
if (ls[i].keepidle) { if (ls[i].keepidle) {
value = ls[i].keepidle;
#if (NGX_KEEPALIVE_FACTOR)
value *= NGX_KEEPALIVE_FACTOR;
#endif
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPIDLE, if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPIDLE,
(const void *) &ls[i].keepidle, sizeof(int)) (const void *) &value, sizeof(int))
== -1) == -1)
{ {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
"setsockopt(TCP_KEEPIDLE, %d) %V failed, ignored", "setsockopt(TCP_KEEPIDLE, %d) %V failed, ignored",
ls[i].keepidle, &ls[i].addr_text); value, &ls[i].addr_text);
} }
} }
if (ls[i].keepintvl) { if (ls[i].keepintvl) {
value = ls[i].keepintvl;
#if (NGX_KEEPALIVE_FACTOR)
value *= NGX_KEEPALIVE_FACTOR;
#endif
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPINTVL, if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_KEEPINTVL,
(const void *) &ls[i].keepintvl, sizeof(int)) (const void *) &value, sizeof(int))
== -1) == -1)
{ {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
"setsockopt(TCP_KEEPINTVL, %d) %V failed, ignored", "setsockopt(TCP_KEEPINTVL, %d) %V failed, ignored",
ls[i].keepintvl, &ls[i].addr_text); value, &ls[i].addr_text);
} }
} }

View File

@ -94,6 +94,11 @@ typedef struct aiocb ngx_aiocb_t;
#define NGX_LISTEN_BACKLOG -1 #define NGX_LISTEN_BACKLOG -1
#ifdef __DragonFly__
#define NGX_KEEPALIVE_FACTOR 1000
#endif
#if (__FreeBSD_version < 430000 || __FreeBSD_version < 500012) #if (__FreeBSD_version < 430000 || __FreeBSD_version < 500012)
pid_t rfork_thread(int flags, void *stack, int (*func)(void *arg), void *arg); pid_t rfork_thread(int flags, void *stack, int (*func)(void *arg), void *arg);