# HG changeset patch # User Igor Sysoev # Date 1241544806 0 # Node ID a445bd4eb571a5096cefb4347efa6ab74c832ef4 # Parent 60551422e1502b37b8632c668f8944aa9c219cfe ngx_create_listening() diff -r 60551422e150 -r a445bd4eb571 src/core/ngx_connection.c --- a/src/core/ngx_connection.c Tue May 05 17:18:33 2009 +0000 +++ b/src/core/ngx_connection.c Tue May 05 17:33:26 2009 +0000 @@ -12,6 +12,64 @@ ngx_os_io_t ngx_io; +ngx_listening_t * +ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) +{ + ngx_listening_t *ls; + struct sockaddr *sa; + u_char text[NGX_SOCKADDR_STRLEN]; + + ls = ngx_array_push(&cf->cycle->listening); + if (ls == NULL) { + return NULL; + } + + ngx_memzero(ls, sizeof(ngx_listening_t)); + + sa = ngx_palloc(cf->pool, socklen); + if (sa == NULL) { + return NULL; + } + + ngx_memcpy(sa, sockaddr, 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; + + switch (ls->sockaddr->sa_family) { +#if (NGX_HAVE_INET6) + case AF_INET6: + ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; + break; +#endif + case AF_INET: + ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; + break; + default: + ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; + break; + } + + ls->backlog = NGX_LISTEN_BACKLOG; + ls->rcvbuf = -1; + ls->sndbuf = -1; + + return ls; +} + + ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle) { diff -r 60551422e150 -r a445bd4eb571 src/core/ngx_connection.h --- a/src/core/ngx_connection.h Tue May 05 17:18:33 2009 +0000 +++ b/src/core/ngx_connection.h Tue May 05 17:33:26 2009 +0000 @@ -163,6 +163,8 @@ }; +ngx_listening_t *ngx_create_listening(ngx_conf_t *cf, void *sockaddr, + socklen_t socklen); ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle); ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle); void ngx_configure_listening_sockets(ngx_cycle_t *cycle); diff -r 60551422e150 -r a445bd4eb571 src/http/ngx_http.c --- a/src/http/ngx_http.c Tue May 05 17:18:33 2009 +0000 +++ b/src/http/ngx_http.c Tue May 05 17:33:26 2009 +0000 @@ -1688,54 +1688,14 @@ ngx_http_add_listening(ngx_conf_t *cf, ngx_http_conf_addr_t *addr) { ngx_listening_t *ls; - struct sockaddr *sa; ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; - u_char text[NGX_SOCKADDR_STRLEN]; - ls = ngx_array_push(&cf->cycle->listening); + ls = ngx_create_listening(cf, addr->sockaddr, addr->socklen); if (ls == NULL) { return NULL; } - ngx_memzero(ls, sizeof(ngx_listening_t)); - - sa = ngx_palloc(cf->pool, addr->socklen); - if (sa == NULL) { - return NULL; - } - - ngx_memcpy(sa, addr->sockaddr, addr->socklen); - - ls->sockaddr = sa; - ls->socklen = addr->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; - - switch (ls->sockaddr->sa_family) { -#if (NGX_HAVE_INET6) - case AF_INET6: - ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; - break; -#endif - case AF_INET: - ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; - break; - default: - ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; - break; - } - ls->addr_ntop = 1; ls->handler = ngx_http_init_connection; diff -r 60551422e150 -r a445bd4eb571 src/mail/ngx_mail.c --- a/src/mail/ngx_mail.c Tue May 05 17:18:33 2009 +0000 +++ b/src/mail/ngx_mail.c Tue May 05 17:33:26 2009 +0000 @@ -72,15 +72,13 @@ ngx_listening_t *ls; ngx_mail_listen_t *mls; ngx_mail_module_t *module; - struct sockaddr *sa; - struct sockaddr_in *sin; + struct sockaddr_in sin; ngx_mail_in_port_t *mip; ngx_mail_conf_ctx_t *ctx; ngx_mail_conf_in_port_t *in_port; ngx_mail_conf_in_addr_t *in_addr; ngx_mail_core_srv_conf_t **cscfp; ngx_mail_core_main_conf_t *cmcf; - u_char buf[NGX_SOCKADDR_STRLEN]; if (cmd->name.data[0] == 'i') { ngx_conf_log_error(NGX_LOG_WARN, cf, 0, @@ -302,57 +300,17 @@ continue; } - ls = ngx_array_push(&cf->cycle->listening); + ngx_memzero(&sin, sizeof(struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = in_addr[a].addr; + sin.sin_port = htons(in_port[p].port); + + ls = ngx_create_listening(cf, &sin, sizeof(struct sockaddr_in)); if (ls == NULL) { return NULL; } - ngx_memzero(ls, sizeof(ngx_listening_t)); - - sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)); - if (sin == NULL) { - return NULL; - } - - sin->sin_family = AF_INET; - sin->sin_addr.s_addr = in_addr[a].addr; - sin->sin_port = htons(in_port[p].port); - - sa = (struct sockaddr *) sin; - - ls->sockaddr = sa; - ls->socklen = sizeof(struct sockaddr_in); - - ls->addr_text.len = ngx_sock_ntop(sa, buf, 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, buf, ls->addr_text.len); - - ls->fd = (ngx_socket_t) -1; - ls->type = SOCK_STREAM; - - switch (ls->sockaddr->sa_family) { -#if (NGX_HAVE_INET6) - case AF_INET6: - ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; - break; -#endif - case AF_INET: - ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; - break; - default: - ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; - break; - } - - ls->backlog = NGX_LISTEN_BACKLOG; - ls->rcvbuf = -1; - ls->sndbuf = -1; - ls->addr_ntop = 1; ls->handler = ngx_mail_init_connection; ls->pool_size = 256;