Mercurial > hg > nginx-quic
comparison src/event/ngx_event_connect.c @ 479:c52408583801 release-0.1.14
nginx-0.1.14-RELEASE import
*) 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; the bug had 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 <igor@sysoev.ru> |
---|---|
date | Tue, 18 Jan 2005 13:03:58 +0000 |
parents | 8e8f3af115b5 |
children | 621229427cba |
comparison
equal
deleted
inserted
replaced
478:e6576f690993 | 479:c52408583801 |
---|---|
23 ngx_peer_t *peer; | 23 ngx_peer_t *peer; |
24 ngx_socket_t s; | 24 ngx_socket_t s; |
25 ngx_event_t *rev, *wev; | 25 ngx_event_t *rev, *wev; |
26 ngx_connection_t *c; | 26 ngx_connection_t *c; |
27 ngx_event_conf_t *ecf; | 27 ngx_event_conf_t *ecf; |
28 struct sockaddr_in addr; | |
29 | 28 |
30 now = ngx_time(); | 29 now = ngx_time(); |
31 | 30 |
32 /* ngx_lock_mutex(pc->peers->mutex); */ | 31 /* ngx_lock_mutex(pc->peers->mutex); */ |
33 | 32 |
52 | 51 |
53 pc->cached = 0; | 52 pc->cached = 0; |
54 pc->connection = NULL; | 53 pc->connection = NULL; |
55 | 54 |
56 if (pc->peers->number == 1) { | 55 if (pc->peers->number == 1) { |
57 peer = &pc->peers->peers[0]; | 56 peer = &pc->peers->peer[0]; |
58 | 57 |
59 } else { | 58 } else { |
60 | 59 |
61 /* there are several peers */ | 60 /* there are several peers */ |
62 | 61 |
63 if (pc->tries == pc->peers->number) { | 62 if (pc->tries == pc->peers->number) { |
64 | 63 |
65 /* it's a first try - get a current peer */ | 64 /* it's a first try - get a current peer */ |
66 | 65 |
67 pc->cur_peer = pc->peers->current++; | 66 pc->cur_peer = pc->peers->current; |
67 | |
68 pc->peers->weight--; | |
69 | |
70 if (pc->peers->weight == 0) { | |
71 pc->peers->current++; | |
72 } | |
68 | 73 |
69 if (pc->peers->current >= pc->peers->number) { | 74 if (pc->peers->current >= pc->peers->number) { |
70 pc->peers->current = 0; | 75 pc->peers->current = 0; |
71 } | 76 } |
72 } | 77 |
73 | 78 if (pc->peers->weight == 0) { |
74 if (pc->peers->max_fails == 0) { | 79 pc->peers->weight = pc->peers->peer[pc->peers->current].weight; |
75 peer = &pc->peers->peers[pc->cur_peer]; | 80 } |
76 | 81 } |
77 } else { | 82 |
78 | 83 for ( ;; ) { |
79 /* the peers support a fault tolerance */ | 84 peer = &pc->peers->peer[pc->cur_peer]; |
80 | 85 |
81 for ( ;; ) { | 86 if (peer->fails <= peer->max_fails) { |
82 peer = &pc->peers->peers[pc->cur_peer]; | 87 break; |
83 | 88 } |
84 if (peer->fails <= pc->peers->max_fails) { | 89 |
85 break; | 90 if (now - peer->accessed > peer->fail_timeout) { |
86 } | 91 peer->fails = 0; |
87 | 92 break; |
88 if (now - peer->accessed > pc->peers->fail_timeout) { | 93 } |
89 peer->fails = 0; | 94 |
90 break; | 95 pc->cur_peer++; |
91 } | 96 |
92 | 97 if (pc->cur_peer >= pc->peers->number) { |
93 pc->cur_peer++; | 98 pc->cur_peer = 0; |
94 | 99 } |
95 if (pc->cur_peer >= pc->peers->number) { | 100 |
96 pc->cur_peer = 0; | 101 pc->tries--; |
97 } | 102 |
98 | 103 if (pc->tries == 0) { |
99 pc->tries--; | 104 /* ngx_unlock_mutex(pc->peers->mutex); */ |
100 | 105 |
101 if (pc->tries == 0) { | 106 return NGX_ERROR; |
102 /* ngx_unlock_mutex(pc->peers->mutex); */ | |
103 | |
104 return NGX_ERROR; | |
105 } | |
106 } | 107 } |
107 } | 108 } |
108 } | 109 } |
109 | 110 |
110 /* ngx_unlock_mutex(pc->peers->mutex); */ | 111 /* ngx_unlock_mutex(pc->peers->mutex); */ |
111 | 112 |
112 | 113 |
113 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); | 114 s = ngx_socket(peer->sockaddr->sa_family, SOCK_STREAM, 0); |
114 | 115 |
115 if (s == -1) { | 116 if (s == -1) { |
116 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, | 117 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
117 ngx_socket_n " failed"); | 118 ngx_socket_n " failed"); |
118 return NGX_ERROR; | 119 return NGX_ERROR; |
255 if (ngx_add_conn(c) == NGX_ERROR) { | 256 if (ngx_add_conn(c) == NGX_ERROR) { |
256 return NGX_ERROR; | 257 return NGX_ERROR; |
257 } | 258 } |
258 } | 259 } |
259 | 260 |
260 ngx_memzero(&addr, sizeof(struct sockaddr_in)); | |
261 | |
262 addr.sin_family = AF_INET; | |
263 addr.sin_port = peer->port; | |
264 addr.sin_addr.s_addr = peer->addr; | |
265 | |
266 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, | 261 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, |
267 "connect to %V, #%d", &peer->addr_port_text, c->number); | 262 "connect to %V, #%d", &peer->name, c->number); |
268 | 263 |
269 rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); | 264 rc = connect(s, peer->sockaddr, peer->socklen); |
270 | 265 |
271 if (rc == -1) { | 266 if (rc == -1) { |
272 err = ngx_socket_errno; | 267 err = ngx_socket_errno; |
273 | 268 |
274 /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */ | 269 /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */ |
365 | 360 |
366 now = ngx_time(); | 361 now = ngx_time(); |
367 | 362 |
368 /* ngx_lock_mutex(pc->peers->mutex); */ | 363 /* ngx_lock_mutex(pc->peers->mutex); */ |
369 | 364 |
370 pc->peers->peers[pc->cur_peer].fails++; | 365 pc->peers->peer[pc->cur_peer].fails++; |
371 pc->peers->peers[pc->cur_peer].accessed = now; | 366 pc->peers->peer[pc->cur_peer].accessed = now; |
372 | 367 |
373 /* ngx_unlock_mutex(pc->peers->mutex); */ | 368 /* ngx_unlock_mutex(pc->peers->mutex); */ |
374 | 369 |
375 pc->cur_peer++; | 370 pc->cur_peer++; |
376 | 371 |