Mercurial > hg > nginx-vendor-1-0
diff src/event/ngx_event_connect.c @ 28:7ca9bdc82b3f NGINX_0_1_14
nginx 0.1.14
*) Feature: the autoconfiguration directives:
--http-client-body-temp-path=PATH, --http-proxy-temp-path=PATH, and
--http-fastcgi-temp-path=PATH
*) Change: the directory name for the temporary files with the client
request body is specified by directive client_body_temp_path, by
default it is <prefix>/client_body_temp.
*) Feature: the ngx_http_fastcgi_module and the directives:
fastcgi_pass, fastcgi_root, fastcgi_index, fastcgi_params,
fastcgi_connect_timeout, fastcgi_send_timeout, fastcgi_read_timeout,
fastcgi_send_lowat, fastcgi_header_buffer_size, fastcgi_buffers,
fastcgi_busy_buffers_size, fastcgi_temp_path,
fastcgi_max_temp_file_size, fastcgi_temp_file_write_size,
fastcgi_next_upstream, and fastcgi_x_powered_by.
*) Bugfix: the "[alert] zero size buf" error; bug appeared in 0.1.3.
*) Change: the URI must be specified after the host name in the
proxy_pass directive.
*) Change: the %3F symbol in the URI was considered as the argument
string start.
*) Feature: the unix domain sockets support in the
ngx_http_proxy_module.
*) Feature: the ssl_engine and ssl_ciphers directives.
Thanks to Sergey Skvortsov for SSL-accelerator.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 18 Jan 2005 00:00:00 +0300 |
parents | 8b6db3bda591 |
children | da8c190bdaba |
line wrap: on
line diff
--- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -25,7 +25,6 @@ ngx_int_t ngx_event_connect_peer(ngx_pee ngx_event_t *rev, *wev; ngx_connection_t *c; ngx_event_conf_t *ecf; - struct sockaddr_in addr; now = ngx_time(); @@ -54,7 +53,7 @@ ngx_int_t ngx_event_connect_peer(ngx_pee pc->connection = NULL; if (pc->peers->number == 1) { - peer = &pc->peers->peers[0]; + peer = &pc->peers->peer[0]; } else { @@ -64,45 +63,47 @@ ngx_int_t ngx_event_connect_peer(ngx_pee /* it's a first try - get a current peer */ - pc->cur_peer = pc->peers->current++; + pc->cur_peer = pc->peers->current; + + pc->peers->weight--; + + if (pc->peers->weight == 0) { + pc->peers->current++; + } if (pc->peers->current >= pc->peers->number) { pc->peers->current = 0; } + + if (pc->peers->weight == 0) { + pc->peers->weight = pc->peers->peer[pc->peers->current].weight; + } } - if (pc->peers->max_fails == 0) { - peer = &pc->peers->peers[pc->cur_peer]; - - } else { - - /* the peers support a fault tolerance */ + for ( ;; ) { + peer = &pc->peers->peer[pc->cur_peer]; - for ( ;; ) { - peer = &pc->peers->peers[pc->cur_peer]; + if (peer->fails <= peer->max_fails) { + break; + } - if (peer->fails <= pc->peers->max_fails) { - break; - } + if (now - peer->accessed > peer->fail_timeout) { + peer->fails = 0; + break; + } - if (now - peer->accessed > pc->peers->fail_timeout) { - peer->fails = 0; - break; - } + pc->cur_peer++; - pc->cur_peer++; + if (pc->cur_peer >= pc->peers->number) { + pc->cur_peer = 0; + } - if (pc->cur_peer >= pc->peers->number) { - pc->cur_peer = 0; - } - - pc->tries--; + pc->tries--; - if (pc->tries == 0) { - /* ngx_unlock_mutex(pc->peers->mutex); */ + if (pc->tries == 0) { + /* ngx_unlock_mutex(pc->peers->mutex); */ - return NGX_ERROR; - } + return NGX_ERROR; } } } @@ -110,7 +111,7 @@ ngx_int_t ngx_event_connect_peer(ngx_pee /* ngx_unlock_mutex(pc->peers->mutex); */ - s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + s = ngx_socket(peer->sockaddr->sa_family, SOCK_STREAM, 0); if (s == -1) { ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, @@ -257,16 +258,10 @@ ngx_int_t ngx_event_connect_peer(ngx_pee } } - ngx_memzero(&addr, sizeof(struct sockaddr_in)); + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, + "connect to %V, #%d", &peer->name, c->number); - addr.sin_family = AF_INET; - addr.sin_port = peer->port; - addr.sin_addr.s_addr = peer->addr; - - ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, - "connect to %V, #%d", &peer->addr_port_text, c->number); - - rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); + rc = connect(s, peer->sockaddr, peer->socklen); if (rc == -1) { err = ngx_socket_errno; @@ -367,8 +362,8 @@ void ngx_event_connect_peer_failed(ngx_p /* ngx_lock_mutex(pc->peers->mutex); */ - pc->peers->peers[pc->cur_peer].fails++; - pc->peers->peers[pc->cur_peer].accessed = now; + pc->peers->peer[pc->cur_peer].fails++; + pc->peers->peer[pc->cur_peer].accessed = now; /* ngx_unlock_mutex(pc->peers->mutex); */