mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
Workaround for "configuration file test failed" under OpenVZ.
If nginx was used under OpenVZ and a container with nginx was suspended and resumed, configuration tests started to fail because of EADDRINUSE returned from listen() instead of bind(): # nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use) nginx: configuration file /etc/nginx/nginx.conf test failed With this change EADDRINUSE errors returned by listen() are handled similarly to errors returned by bind(), and configuration tests work fine in the same environment: # nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful More details about OpenVZ suspend/resume bug: https://bugzilla.openvz.org/show_bug.cgi?id=2470
This commit is contained in:
parent
29cebe5d63
commit
97741382b6
@ -567,9 +567,19 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
||||
#endif
|
||||
|
||||
if (listen(s, ls[i].backlog) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
err = ngx_socket_errno;
|
||||
|
||||
/*
|
||||
* on OpenVZ after suspend/resume EADDRINUSE
|
||||
* may be returned by listen() instead of bind(), see
|
||||
* https://bugzilla.openvz.org/show_bug.cgi?id=2470
|
||||
*/
|
||||
|
||||
if (err != NGX_EADDRINUSE || !ngx_test_config) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, err,
|
||||
"listen() to %V, backlog %d failed",
|
||||
&ls[i].addr_text, ls[i].backlog);
|
||||
}
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
@ -577,9 +587,17 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
if (err != NGX_EADDRINUSE) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (!ngx_test_config) {
|
||||
failed = 1;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ls[i].listen = 1;
|
||||
|
||||
ls[i].fd = s;
|
||||
|
Loading…
Reference in New Issue
Block a user