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;
