Mercurial > hg > nginx
comparison src/http/ngx_http_upstream_round_robin.c @ 5475:07dd5bd222ac
Changed resolver API to use ngx_addr_t.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Fri, 06 Dec 2013 14:30:27 +0400 |
parents | 359f49a84f87 |
children | efc84a5723b3 |
comparison
equal
deleted
inserted
replaced
5474:b43b02bb54db | 5475:07dd5bd222ac |
---|---|
264 ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r, | 264 ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r, |
265 ngx_http_upstream_resolved_t *ur) | 265 ngx_http_upstream_resolved_t *ur) |
266 { | 266 { |
267 u_char *p; | 267 u_char *p; |
268 size_t len; | 268 size_t len; |
269 socklen_t socklen; | |
269 ngx_uint_t i, n; | 270 ngx_uint_t i, n; |
270 struct sockaddr_in *sin; | 271 struct sockaddr *sockaddr; |
271 ngx_http_upstream_rr_peers_t *peers; | 272 ngx_http_upstream_rr_peers_t *peers; |
272 ngx_http_upstream_rr_peer_data_t *rrp; | 273 ngx_http_upstream_rr_peer_data_t *rrp; |
273 | 274 |
274 rrp = r->upstream->peer.data; | 275 rrp = r->upstream->peer.data; |
275 | 276 |
304 | 305 |
305 } else { | 306 } else { |
306 | 307 |
307 for (i = 0; i < ur->naddrs; i++) { | 308 for (i = 0; i < ur->naddrs; i++) { |
308 | 309 |
309 len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1; | 310 socklen = ur->addrs[i].socklen; |
310 | 311 |
311 p = ngx_pnalloc(r->pool, len); | 312 sockaddr = ngx_palloc(r->pool, socklen); |
313 if (sockaddr == NULL) { | |
314 return NGX_ERROR; | |
315 } | |
316 | |
317 ngx_memcpy(sockaddr, ur->addrs[i].sockaddr, socklen); | |
318 | |
319 switch (sockaddr->sa_family) { | |
320 #if (NGX_HAVE_INET6) | |
321 case AF_INET6: | |
322 ((struct sockaddr_in6 *) sockaddr)->sin6_port = htons(ur->port); | |
323 break; | |
324 #endif | |
325 default: /* AF_INET */ | |
326 ((struct sockaddr_in *) sockaddr)->sin_port = htons(ur->port); | |
327 } | |
328 | |
329 p = ngx_pnalloc(r->pool, NGX_SOCKADDR_STRLEN); | |
312 if (p == NULL) { | 330 if (p == NULL) { |
313 return NGX_ERROR; | 331 return NGX_ERROR; |
314 } | 332 } |
315 | 333 |
316 len = ngx_inet_ntop(AF_INET, &ur->addrs[i], p, NGX_INET_ADDRSTRLEN); | 334 len = ngx_sock_ntop(sockaddr, socklen, p, NGX_SOCKADDR_STRLEN, 1); |
317 len = ngx_sprintf(&p[len], ":%d", ur->port) - p; | 335 |
318 | 336 peers->peer[i].sockaddr = sockaddr; |
319 sin = ngx_pcalloc(r->pool, sizeof(struct sockaddr_in)); | 337 peers->peer[i].socklen = socklen; |
320 if (sin == NULL) { | |
321 return NGX_ERROR; | |
322 } | |
323 | |
324 sin->sin_family = AF_INET; | |
325 sin->sin_port = htons(ur->port); | |
326 sin->sin_addr.s_addr = ur->addrs[i]; | |
327 | |
328 peers->peer[i].sockaddr = (struct sockaddr *) sin; | |
329 peers->peer[i].socklen = sizeof(struct sockaddr_in); | |
330 peers->peer[i].name.len = len; | 338 peers->peer[i].name.len = len; |
331 peers->peer[i].name.data = p; | 339 peers->peer[i].name.data = p; |
332 peers->peer[i].weight = 1; | 340 peers->peer[i].weight = 1; |
333 peers->peer[i].effective_weight = 1; | 341 peers->peer[i].effective_weight = 1; |
334 peers->peer[i].current_weight = 0; | 342 peers->peer[i].current_weight = 0; |