aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_connection.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-10-26 11:43:32 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-10-26 11:43:32 +0000
commitbaf8e409bacae99139c46f85d2227acb9301e485 (patch)
tree74e68cb49372f3add5d7b32c9c60edec99625266 /src/core/ngx_connection.c
parent657b3b7f7dded18d6aaaa3d8a3b130509904dc9d (diff)
downloadnginx-baf8e409bacae99139c46f85d2227acb9301e485.tar.gz
nginx-baf8e409bacae99139c46f85d2227acb9301e485.zip
http listen unix domain sockets
Diffstat (limited to 'src/core/ngx_connection.c')
-rw-r--r--src/core/ngx_connection.c45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 01c205877..046d92711 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -15,6 +15,7 @@ ngx_os_io_t ngx_io;
ngx_listening_t *
ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
{
+ size_t len;
ngx_listening_t *ls;
struct sockaddr *sa;
u_char text[NGX_SOCKADDR_STRLEN];
@@ -36,17 +37,8 @@ ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
ls->sockaddr = sa;
ls->socklen = socklen;
- ls->addr_text.len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1);
-
- ls->addr_text.data = ngx_pnalloc(cf->pool, ls->addr_text.len);
- if (ls->addr_text.data == NULL) {
- return NULL;
- }
-
- ngx_memcpy(ls->addr_text.data, text, ls->addr_text.len);
-
- ls->fd = (ngx_socket_t) -1;
- ls->type = SOCK_STREAM;
+ len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1);
+ ls->addr_text.len = len;
switch (ls->sockaddr->sa_family) {
#if (NGX_HAVE_INET6)
@@ -54,6 +46,12 @@ ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN;
break;
#endif
+#if (NGX_HAVE_UNIX_DOMAIN)
+ case AF_UNIX:
+ ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
+ len++;
+ break;
+#endif
case AF_INET:
ls->addr_text_max_len = NGX_INET_ADDRSTRLEN;
break;
@@ -62,6 +60,16 @@ ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
break;
}
+ ls->addr_text.data = ngx_pnalloc(cf->pool, len);
+ if (ls->addr_text.data == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(ls->addr_text.data, text, len);
+
+ ls->fd = (ngx_socket_t) -1;
+ ls->type = SOCK_STREAM;
+
ls->backlog = NGX_LISTEN_BACKLOG;
ls->rcvbuf = -1;
ls->sndbuf = -1;
@@ -604,6 +612,21 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle)
ngx_close_socket_n " %V failed", &ls[i].addr_text);
}
+#if (NGX_HAVE_UNIX_DOMAIN)
+
+ if (ls[i].sockaddr->sa_family == AF_UNIX
+ && ngx_process != NGX_PROCESS_WORKER)
+ {
+ u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1;
+
+ if (ngx_delete_file(name) == -1) {
+ ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
+ ngx_delete_file_n " %s failed", name);
+ }
+ }
+
+#endif
+
ls[i].fd = (ngx_socket_t) -1;
}
}