comparison src/core/ngx_connection.c @ 5263:05ba5bce31e0

Core: extended ngx_sock_ntop() with socklen parameter. On Linux, sockaddr length is required to process unix socket addresses properly due to unnamed sockets (which don't have sun_path set at all) and abstract namespace sockets.
author Vladimir Homutov <vl@nginx.com>
date Thu, 11 Jul 2013 16:07:25 +0400
parents f941cf265cc5
children b6ffe53f9c3d
comparison
equal deleted inserted replaced
5262:626f288fa5ed 5263:05ba5bce31e0
39 ngx_memcpy(sa, sockaddr, socklen); 39 ngx_memcpy(sa, sockaddr, socklen);
40 40
41 ls->sockaddr = sa; 41 ls->sockaddr = sa;
42 ls->socklen = socklen; 42 ls->socklen = socklen;
43 43
44 len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); 44 len = ngx_sock_ntop(sa, socklen, text, NGX_SOCKADDR_STRLEN, 1);
45 ls->addr_text.len = len; 45 ls->addr_text.len = len;
46 46
47 switch (ls->sockaddr->sa_family) { 47 switch (ls->sockaddr->sa_family) {
48 #if (NGX_HAVE_INET6) 48 #if (NGX_HAVE_INET6)
49 case AF_INET6: 49 case AF_INET6:
150 ls[i].addr_text.data = ngx_pnalloc(cycle->pool, len); 150 ls[i].addr_text.data = ngx_pnalloc(cycle->pool, len);
151 if (ls[i].addr_text.data == NULL) { 151 if (ls[i].addr_text.data == NULL) {
152 return NGX_ERROR; 152 return NGX_ERROR;
153 } 153 }
154 154
155 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].addr_text.data, len, 1); 155 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].socklen,
156 ls[i].addr_text.data, len, 1);
156 if (len == 0) { 157 if (len == 0) {
157 return NGX_ERROR; 158 return NGX_ERROR;
158 } 159 }
159 160
160 ls[i].addr_text.len = len; 161 ls[i].addr_text.len = len;
1066 1067
1067 if (s == NULL) { 1068 if (s == NULL) {
1068 return NGX_OK; 1069 return NGX_OK;
1069 } 1070 }
1070 1071
1071 s->len = ngx_sock_ntop(c->local_sockaddr, s->data, s->len, port); 1072 s->len = ngx_sock_ntop(c->local_sockaddr, len, s->data, s->len, port);
1072 1073
1073 return NGX_OK; 1074 return NGX_OK;
1074 } 1075 }
1075 1076
1076 1077