ngx_create_listening()
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 5dd1b7e..a743dbb 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -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 --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index fc6416c..7a4c658 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -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 --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 5e487e7..a9b4ee5 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -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 --git a/src/mail/ngx_mail.c b/src/mail/ngx_mail.c
index a067989..3ed900d 100644
--- a/src/mail/ngx_mail.c
+++ b/src/mail/ngx_mail.c
@@ -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;