Mercurial > hg > nginx
diff src/core/ngx_connection.c @ 3230:a7491af45540
http listen unix domain sockets
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 26 Oct 2009 11:43:32 +0000 |
parents | ad3ddfd06e7d |
children | a6df0624203c |
line wrap: on
line diff
--- a/src/core/ngx_connection.c Thu Oct 22 10:17:54 2009 +0000 +++ b/src/core/ngx_connection.c Mon Oct 26 11:43:32 2009 +0000 @@ -15,6 +15,7 @@ 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 @@ 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 @@ 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 @@ 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_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; } }