diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2018-07-12 19:50:02 +0300 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2018-07-12 19:50:02 +0300 |
| commit | 751bdd3bb2b6ff54be09c37ff328f258fed520fb (patch) | |
| tree | 6ca2cfcbd7a21422d630960eba9662272773e1a6 /src/event/ngx_event.c | |
| parent | a8e38e2a9c1c9f3afb22fdb196e85fb2f28c192c (diff) | |
| download | nginx-751bdd3bb2b6ff54be09c37ff328f258fed520fb.tar.gz nginx-751bdd3bb2b6ff54be09c37ff328f258fed520fb.tar.bz2 | |
Events: moved sockets cloning to ngx_event_init_conf().
Previously, listenings sockets were not cloned if the worker_processes
directive was specified after "listen ... reuseport".
This also simplifies upcoming configuration check on the number
of worker connections, as it needs to know the number of listening
sockets before cloning.
Diffstat (limited to 'src/event/ngx_event.c')
| -rw-r--r-- | src/event/ngx_event.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 57af81324..a18b1132c 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -410,12 +410,37 @@ ngx_handle_write_event(ngx_event_t *wev, size_t lowat) static char * ngx_event_init_conf(ngx_cycle_t *cycle, void *conf) { +#if (NGX_HAVE_REUSEPORT) + ngx_uint_t i; + ngx_listening_t *ls; +#endif + if (ngx_get_conf(cycle->conf_ctx, ngx_events_module) == NULL) { ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "no \"events\" section in configuration"); return NGX_CONF_ERROR; } +#if (NGX_HAVE_REUSEPORT) + + ls = cycle->listening.elts; + for (i = 0; i < cycle->listening.nelts; i++) { + + if (!ls[i].reuseport || ls[i].worker != 0) { + continue; + } + + if (ngx_clone_listening(cycle, &ls[i]) != NGX_OK) { + return NGX_CONF_ERROR; + } + + /* cloning may change cycle->listening.elts */ + + ls = cycle->listening.elts; + } + +#endif + return NGX_CONF_OK; } |
