details: http://hg.nginx.org/nginx/rev/6c13008ad503 branches: changeset: 6976:6c13008ad503 user: Vladimir Homutov <v...@nginx.com> date: Mon Apr 03 17:30:34 2017 +0300 description: Mail: configurable socket buffer sizes.
The "rcvbuf" and "sndbuf" parameters are now supported by the "listen" directive. diffstat: src/mail/ngx_mail.c | 2 ++ src/mail/ngx_mail.h | 2 ++ src/mail/ngx_mail_core_module.c | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletions(-) diffs (84 lines): diff -r d7ce41bdf050 -r 6c13008ad503 src/mail/ngx_mail.c --- a/src/mail/ngx_mail.c Mon Apr 03 17:29:19 2017 +0300 +++ b/src/mail/ngx_mail.c Mon Apr 03 17:30:34 2017 +0300 @@ -333,6 +333,8 @@ ngx_mail_optimize_servers(ngx_conf_t *cf ls->log.handler = ngx_accept_log_error; ls->backlog = addr[i].opt.backlog; + ls->rcvbuf = addr[i].opt.rcvbuf; + ls->sndbuf = addr[i].opt.sndbuf; ls->keepalive = addr[i].opt.so_keepalive; #if (NGX_HAVE_KEEPALIVE_TUNABLE) diff -r d7ce41bdf050 -r 6c13008ad503 src/mail/ngx_mail.h --- a/src/mail/ngx_mail.h Mon Apr 03 17:29:19 2017 +0300 +++ b/src/mail/ngx_mail.h Mon Apr 03 17:30:34 2017 +0300 @@ -46,6 +46,8 @@ typedef struct { int tcp_keepcnt; #endif int backlog; + int rcvbuf; + int sndbuf; } ngx_mail_listen_t; diff -r d7ce41bdf050 -r 6c13008ad503 src/mail/ngx_mail_core_module.c --- a/src/mail/ngx_mail_core_module.c Mon Apr 03 17:29:19 2017 +0300 +++ b/src/mail/ngx_mail_core_module.c Mon Apr 03 17:30:34 2017 +0300 @@ -295,7 +295,7 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx { ngx_mail_core_srv_conf_t *cscf = conf; - ngx_str_t *value; + ngx_str_t *value, size; ngx_url_t u; ngx_uint_t i, m; ngx_mail_listen_t *ls; @@ -350,6 +350,8 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx ls->socklen = u.socklen; ls->backlog = NGX_LISTEN_BACKLOG; + ls->rcvbuf = -1; + ls->sndbuf = -1; ls->wildcard = u.wildcard; ls->ctx = cf->ctx; @@ -398,6 +400,38 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx continue; } + if (ngx_strncmp(value[i].data, "rcvbuf=", 7) == 0) { + size.len = value[i].len - 7; + size.data = value[i].data + 7; + + ls->rcvbuf = ngx_parse_size(&size); + ls->bind = 1; + + if (ls->rcvbuf == NGX_ERROR) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid rcvbuf \"%V\"", &value[i]); + return NGX_CONF_ERROR; + } + + continue; + } + + if (ngx_strncmp(value[i].data, "sndbuf=", 7) == 0) { + size.len = value[i].len - 7; + size.data = value[i].data + 7; + + ls->sndbuf = ngx_parse_size(&size); + ls->bind = 1; + + if (ls->sndbuf == NGX_ERROR) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid sndbuf \"%V\"", &value[i]); + return NGX_CONF_ERROR; + } + + continue; + } + if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) size_t len; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel