diff options
Diffstat (limited to 'src/event/ngx_event_connect.c')
| -rw-r--r-- | src/event/ngx_event_connect.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c index 857b3f695..0fa0f70e2 100644 --- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -19,6 +19,7 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc) ngx_socket_t s; ngx_event_t *rev, *wev; ngx_connection_t *c; + ngx_event_conf_t *ecf; struct sockaddr_in addr; now = ngx_time(); @@ -103,6 +104,29 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc) return NGX_ERROR; } + + ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module); + + /* disable warning: Win32 SOCKET is u_int while UNIX socket is int */ + + if ((ngx_uint_t) s >= ecf->connections) { + + ngx_log_error(NGX_LOG_ALERT, pc->log, 0, + "socket() returned socket #%d while only %d " + "connections was configured, closing the socket", + s, ecf->connections); + + if (ngx_close_socket(s) == -1) { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + ngx_close_socket_n "failed"); + } + + /* TODO: sleep for some time */ + + return NGX_ERROR; + } + + if (pc->rcvbuf) { if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, (const void *) &pc->rcvbuf, sizeof(int)) == -1) { |
