aboutsummaryrefslogtreecommitdiff
path: root/src/stream/ngx_stream_core_module.c
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2016-05-20 19:10:42 +0300
committerRuslan Ermilov <ru@nginx.com>2016-05-20 19:10:42 +0300
commit48a16463fa41e508810a6914a126cfce87273cc8 (patch)
tree44b7361ba69f64ad33f4dd100bf370a2b28297bd /src/stream/ngx_stream_core_module.c
parentf7673bb50f758cb421ca3a5186c49292a85d08ae (diff)
downloadnginx-48a16463fa41e508810a6914a126cfce87273cc8.tar.gz
nginx-48a16463fa41e508810a6914a126cfce87273cc8.zip
Use ngx_cmp_sockaddr() where appropriate.
Diffstat (limited to 'src/stream/ngx_stream_core_module.c')
-rw-r--r--src/stream/ngx_stream_core_module.c56
1 files changed, 6 insertions, 50 deletions
diff --git a/src/stream/ngx_stream_core_module.c b/src/stream/ngx_stream_core_module.c
index ebc2b1c07..1894aa654 100644
--- a/src/stream/ngx_stream_core_module.c
+++ b/src/stream/ngx_stream_core_module.c
@@ -248,18 +248,11 @@ ngx_stream_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
static char *
ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
- size_t len, off;
- in_port_t port;
ngx_str_t *value;
ngx_url_t u;
ngx_uint_t i, backlog;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
ngx_stream_listen_t *ls;
ngx_stream_core_main_conf_t *cmcf;
-#if (NGX_HAVE_INET6)
- struct sockaddr_in6 *sin6;
-#endif
value = cf->args->elts;
@@ -284,49 +277,13 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
for (i = 0; i < cmcf->listen.nelts; i++) {
- sa = &ls[i].u.sockaddr;
-
- if (sa->sa_family != u.family) {
- continue;
- }
-
- switch (sa->sa_family) {
-
-#if (NGX_HAVE_INET6)
- case AF_INET6:
- off = offsetof(struct sockaddr_in6, sin6_addr);
- len = 16;
- sin6 = &ls[i].u.sockaddr_in6;
- port = sin6->sin6_port;
- break;
-#endif
-
-#if (NGX_HAVE_UNIX_DOMAIN)
- case AF_UNIX:
- off = offsetof(struct sockaddr_un, sun_path);
- len = sizeof(((struct sockaddr_un *) sa)->sun_path);
- port = 0;
- break;
-#endif
-
- default: /* AF_INET */
- off = offsetof(struct sockaddr_in, sin_addr);
- len = 4;
- sin = &ls[i].u.sockaddr_in;
- port = sin->sin_port;
- break;
- }
-
- if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len)
- != 0)
+ if (ngx_cmp_sockaddr(&ls[i].u.sockaddr, ls[i].socklen,
+ (struct sockaddr *) &u.sockaddr, u.socklen, 1)
+ != NGX_OK)
{
continue;
}
- if (port != u.port) {
- continue;
- }
-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"duplicate \"%V\" address and port pair", &u.url);
return NGX_CONF_ERROR;
@@ -384,11 +341,10 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
+ size_t len;
u_char buf[NGX_SOCKADDR_STRLEN];
- sa = &ls->u.sockaddr;
-
- if (sa->sa_family == AF_INET6) {
+ if (ls->u.sockaddr.sa_family == AF_INET6) {
if (ngx_strcmp(&value[i].data[10], "n") == 0) {
ls->ipv6only = 1;
@@ -406,7 +362,7 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ls->bind = 1;
} else {
- len = ngx_sock_ntop(sa, ls->socklen, buf,
+ len = ngx_sock_ntop(&ls->u.sockaddr, ls->socklen, buf,
NGX_SOCKADDR_STRLEN, 1);
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,